home *** CD-ROM | disk | FTP | other *** search
/ A.C.E. 2 / ACE CD 2.iso / FILES / DOCS / REAL3DD.LHA / Real3DPart3.doc < prev    next >
Text File  |  1994-11-27  |  150KB  |  3,626 lines

  1.  
  2.  
  3.  
  4.                 PART 3
  5.              Follow On From Part 2
  6.  
  7.  
  8.  
  9.  
  10. 5.15 OBJECT ATTRIBUTES AND RENDERING
  11.  
  12. The object attributes include several features for controlling the
  13. rendering of objects. Some of the flags are intended for speed
  14. optimizations and some are for special rendering effects.
  15.  
  16. You can set these flags using the Modify/Properties/Attributes function.
  17.  
  18. 5.15.1 Scene gadget
  19.  
  20. The "Scene" gadget of the Attributes requester makes selected objects.
  21. Invisible in the first phase ray tracing. This means that you cannot see
  22. the object directly, but you can see its shadows, reflections, etc. This
  23. may sound a bit strange but consider the following problem: a shiny,
  24. golden logo moving in a black space looks good but unfortunately black
  25. space produces no reflections! The solution is to create an environment
  26. which creates rich reflections for the logo, and then make the environment
  27. invisible using the Scene-function.
  28.  
  29. 5.15.2 Backdrop and Matte Objects
  30.  
  31. The "Matte" gadget of the object attributes requester controls "matte"
  32. shading of objects. An object having this attribute set is shaded using
  33. the background colours. This may sound strange, but actually this feature
  34. is very useful when combining 3D computer graphics with video graphics or
  35. other 2D graphics.
  36.  
  37.                              - TUTORIAL 5.14 -
  38.  
  39. It allows you to create "backdrop layers", as demonstrated in the next
  40. example in which a "UfO" is flying around your house:
  41.  
  42. 1. Digitize a picture of your house (use a scanner, video digitizer, or
  43.    a paint program).
  44.  
  45. 2. Open a suitable rendering screen with a borderless View and a Select
  46.    window; for example a 16 colour HIRES-Lace screen is suitable.
  47.  
  48. 3. Select View/Observer/Create Camera. Position the camera approximately
  49.    so that it corresponds to the camera position where the original
  50.    picture was taken. You may use exact 3D coordinates for this purpose
  51.    or a cube shape representing roughly the shape of the house so that
  52.    you can visually adjust the camera position. When the camera is set,
  53.    delete the cube. The scale should be adjusted carefully to match the
  54.    camera lens angle. The purpose of this step is get roughly equal
  55.    perspective in the backdrop image and the true 3D scene.
  56.  
  57. 4. Open the render settings requester for the View and select for example
  58.    Environment mode. Activate the Backdrop image gadget and enter the name
  59.    of the picture of the house to the backdrop image field.
  60.    Then select OK.
  61.  
  62. 5. Hit <RAM>r to render the view. The backdrop image should fill the
  63.    display.
  64.  
  65. 6. When the View is rendered, select Create/Visibles/Polygon and draw a
  66.    polygon along the profile of the house; the polygon should match the
  67.    shape of the house as accurately as possible.
  68.  
  69. 7. Select Modify/Properties/Attributes and activate the "Scene" gadget for
  70.    the polygon. Then press OK button to close the requester.
  71.  
  72. 8. Create the "UfO"; a flat sphere is suitable.
  73.  
  74. 9. Hit <RAM>z to get the top view and use Animate/Create/Rotation to make
  75.    the UfO rotate around the polygon.
  76.  
  77. 10. Use View/Observer/Observer->View function to get the camera view back.
  78.  
  79. 11. Render the animation. The UfO flies around the house disappearing
  80.     behind it and then re-appearing from the opposite side.
  81.  
  82. As you see, you can cleverly blur the boundary between true 3D animation
  83. and digitized images. It is even possible to synchronize a series of
  84. backdrop images with a camera flight, providing that more accurate matte
  85. shapes are used.
  86.  
  87. Note:
  88. That the Matte object feature is designed to work well with the Alpha
  89. channel support: matte objects have a full Alpha transparency. This means
  90. that you can use video systems instead of digitized images to get such
  91. effects as demonstrated above.
  92.  
  93. 5.16 OPTIMIZATIONS
  94.  
  95. Rendering time plays a major role in animation production. Time
  96. limitations should be considered when you are designing the scene. By
  97. default, REAL 3D can simulate reality accurately without compromise.
  98. For example, the user does not have to specify that an object
  99.  
  100.                              - TUTORIAL 5.15 -
  101.  
  102. casts a shadow onto another object. Normal mode rendering calculates all
  103. the shadows automatically and it is up to the user to eliminate objects
  104. from shadow calculations to speed up rendering if desired.
  105.  
  106. In general, it is easy to create scenes which require very long ray
  107. tracing times. The trick is to adjust your scene so that you take
  108. advantage of the time saving features and that you realise the situations
  109. that will increase or decrease your rendering time. For example, create
  110. one thousand wooden objects and render them, the rendering time may be 15
  111. minutes. Then with one single adjustment in the material editor, make the
  112. wood transparent, the scene could take 15 hours. There is nothing
  113. mysterious in this, you just asked REAL 3D to do something 100 times more
  114. complex.
  115.  
  116. Knowing what is practical and possible and what is not in terms of
  117. rendering time is an interesting question and will depend on your hardware
  118. and your understanding of the software. Fortunately, it is always possible
  119. to manipulate the scene to achieve remarkable time savings. Some 3D
  120. animation programs only produce a "scanline" render which is not a full
  121. ray trace.
  122.  
  123. This mode is sometimes useful because it can be rendered fairly quickly.
  124. In REAL 3D V2, you are able to perform "scanline" rendering if you wish
  125. but you are also able to freely adjust the intensity of the rendering to
  126. fully suit your needs.
  127.  
  128. 5.16.1 Rendering Mode
  129.  
  130. The most immediate control over rendering time is provided by rendering
  131. mode selection as described in the chapter 5.5 "Rendering Modes".
  132. Environment mode always renders the scene relatively quickly, rendering
  133. time being typically less than 15 minutes per frame. Starting from Normal
  134. mode, then trying Shadowless, Lampless and finally Environment mode, you
  135. will see the different speeds involved. It is possible to use tricks to
  136. obtain extra realism with simple rendering modes. For example, you can use
  137. shadow maps to create artificial shadows and texture/environment maps to
  138. create artificial but fast reflections; ultimately you can re-create a
  139. "Normal mode" using tricks but then the "manual" work required to obtain
  140. the extra level of realism may take more time (and especially more effort)
  141. than when letting the program render the image with a full level of
  142. realism.
  143.  
  144. 5.16.2 Resolution
  145.  
  146. Image resolution is another significant factor affecting the rendering
  147. time. If you use PAL resolution of 736*584, the rendered time is
  148. guaranteed to be at least 5 times longer than when using a 320*256 HAM
  149. screen. Unfortunately it is difficult to reduce the resolution without
  150. losing quality. Typically, the maximum time savings obtained this way is
  151. of a of magnitude 2.
  152.  
  153. Note:
  154. That colour resolution (6 bit HAM instead of 24 bit quality) does not
  155. affect the rendering time that much except that a smaller amount of data
  156. is faster to save.
  157.  
  158. 5.16.3 Recursion
  159.  
  160. The recursion depth value of the render settings requester affects the
  161. rendering time significantly when large areas of the image are covered by
  162. transparent objects. When light hits a boundary between two materials it
  163. is divided into components, which are studied individually. This results
  164. in an exponential growth in rendering time.
  165.  
  166.                              - TUTORIAL 5.16 -
  167.  
  168. 5. 16.4 Re-interpreting B-splines
  169.  
  170. If the scene contains B-Spline surfaces, rendering can be accelerated
  171. using the B-Spline->Phong function of the render settings requester.
  172. This affects the rendering quality, but when the object is simple, an
  173. adequate quality can be obtained using a higher Subdivision value.
  174.  
  175. Secondly, you can lower the Subdivision setting for B-Spline shading;
  176. often the value 1 is quite sufficient. If the quality requirements or
  177. memory limitations do not allow the previous methods, you may try applying
  178. Modify/Freeform/Reparametrize to the B-Spline meshes and then rendering
  179. the scene with 1 lower Subdivision value. The quality is reasonably
  180. maintained but rendering is faster.
  181.  
  182. 5.16.5 Reflections & Not Reflected.
  183.  
  184. The "Not reflected" object attribute is an accurate and efficient way to
  185. improve rendering time. You can set this attribute using the Modify/
  186. Properties/Attributes function.
  187.  
  188. "Not reflected" property specifies that an object is not considered in
  189. reflection/refraction calculations. You can see the object, but you cannot
  190. see it in a mirror or through a glass window.
  191.  
  192. The most typical application for the feature is a scene including one
  193. large and complex transparent/mirror-like object. When you set the
  194. attribute for the object itself, you can see the rest of the scene in
  195. reflections and refractions, but the object does not reflect itself, which
  196. can be hard to notice anyway.
  197.  
  198. For example:
  199. if you have a large B-Spline modelled statue, say, a human head made of
  200. glass, standing on a simple checker floor surface, activating "Not
  201. reflected" attribute of the head may accelerate the rendering up to 20
  202. times! This is because the reflection computations consider only the
  203. simple floor object instead of hundreds of complex B-Spline patches of the
  204. head. Usually every scene contains numerous minor details which are not
  205. necessary to be seen in reflections. Making them "not reflected" can
  206. accelerate rendering very significantly. It is even possible to add
  207. simpler "Scene" objects for creating the reflections and make the actual
  208. complex visible objects "Not reflected".
  209.  
  210. 5.16.6 Shadows
  211.  
  212. The "Cast shadows" object attribute makes it possible to define for each
  213. individual object or light-source its shadow casting property. Rendering
  214. time can be shortened significantly using this feature. You can access the
  215. feature using Modify/Properties/Attributes function;
  216.  
  217. Note:
  218. That "Cast Shadows" property is set by default and you can unset it to
  219. obtain the optimization.
  220.  
  221. If a visible object has this attribute unset, it does not cast a shadow at
  222. all. You can eliminate the shadows from small details of a scene and
  223. achieve remarkable time savings that way. For example: if you have a
  224. detailed model of a house, it may be enough that the walls cast shadows,
  225. it may not be necessary that doors, windows and other smaller parts cast
  226. shadows, too. This simplification may reduce the number of objects
  227. considered in shadow calculations to a small fraction. Also, sometimes
  228. the user may know that an objects shadow does not fall within the scene
  229. and therefore it is not necessary to cast the shadow. The program cannot
  230. understand the contents of the scene and do the optimization
  231. automatically. For example, if you create a relatively smooth and low
  232. fractal landscape surface and the light falls from above, the ground
  233. surface cannot cast any shadows on any object, although trees and other
  234. objects may cast shadows on it. In this case, the only consequence of
  235. clearing the "Cast shadows" attribute of the ground is much faster
  236. rendering, no shadows are lost.
  237.  
  238.                              - TUTORIAL 5.17 -
  239.  
  240. Secondly, if a light source has the attribute unset, no shadows are
  241. generated from that light source. You can use this feature to add numerous
  242. light sources to a scene to get complicated lighting effects, and still
  243. have reasonable rendering times.
  244.  
  245. Non-pointwise light sources, which produce smooth shadows, usually slow
  246. down rendering. The basic rule is that generating smooth shadows with the
  247. "Lightsamples" value of 1 will triple the rendering time. Therefore, be
  248. careful in your application of this effect which admittedly increases
  249. the photorealism, and use the lowest possible value producing sufficient
  250. quality.
  251.  
  252. 5.16.7 Other Optimizations
  253.  
  254. - Use quadric primitives and compound tools instead of free-forms whenever
  255.   possible.
  256.  
  257. - Motion blur is a nice effect, but it is one of the most time-consuming
  258.   rendering features.
  259.  
  260. - Anti-aliasing level 3 is usually sufficient. Textures with strong colour
  261.   variations combined with a high anti-aliasing level may slow rendering.
  262.  
  263. 5.17 USING ALPHA CHANNEL
  264.  
  265. When you want to render images using the Alpha channel support features of
  266. REAL 3D, do the following:
  267.  
  268. 1. Create the scene. If the scene includes transparent objects, you may
  269.    define a non-zero alpha level for them using the Modify/Properties/
  270.    Alpha Channel function. For example, a glass object may have an Alpha
  271.    value 128.
  272.    The higher the Alpha value, the more you see through the object when
  273.    the image is combined with another images (e.g. live video background).
  274.  
  275. 2. Prepare a View window for the rendering (camera position etc...)
  276.  
  277. 3. Open the render settings requester and select Targa file output.
  278.    Specify the file name. Then activate the "Alpha output and "No bar.
  279.    initial" gadgets. Use any rendering mode except Outline or Draft. Using
  280.    background gradients and backdrop images do not make much sense because
  281.    the background will have full Alpha transparency.
  282.  
  283. 4. Start rendering.
  284.  
  285. Alternatively, you can render to the External screen; REAL 3D can write
  286. the Alpha information to the output target. Of course, the External screen
  287. device must have the Alpha channel feature. Remember to select "Targa+A"
  288. saving mode (Project/External Screen/Settings) before saving the image
  289. from the External screen.
  290.  
  291. 32-bit true colour Targa format uses four bytes to store each pixel of
  292. which one byte is for Alpha information.
  293. This means that the Alpha transparency can be expressed using 256 levels.
  294.  
  295. Note:
  296. That the anti-aliasing algorithms anti-aliase the Alpha information as
  297. well. This means that when you combine computer graphics with a live video
  298. background, the edges of objects in computer generated images are smoothly
  299. blended to video images. Also motion blur and depth of field blur work
  300. correctly: blur against background is partly Alpha transparent.
  301.  
  302.                              - TUTORIAL 5.18 -
  303.  
  304. It is usually important to select "No bgr. antial." gadget when using
  305. Alpha channel. That gadget instructs REAL 3D not to anti-aliase with the
  306. background colour. Otherwise the edges of objects get influenced by the
  307. background colour.
  308.  
  309. For those users who do not have a frame buffer with the Alpha channel
  310. support, there is another method available for using Alpha transparency
  311. information. This method is based on 1-bit mask images. To use this
  312. technique:
  313.  
  314. 1. Create the scene. This time mediumlevel alpha transparency does not
  315.    have much significance (any non-zero value will be fully transparent).
  316.  
  317. 2. Prepare a View window for the rendering (camera position etc...)
  318.  
  319. 3. Use the render settings requester to select the IFF file output.
  320.    Specify the file name. Then activate the "Alpha output" and "No bgr.
  321.    antial" gadgets. Use any rendering mode except Outline or Draft.
  322.  
  323. 4. Start rendering. REAL 3D renders two images of each frame, one 24-bit
  324.    image and one 1-bit mask image. Both images have identical resolutions.
  325.  
  326. 5.l8 RENDERING FIELDS
  327.  
  328. When very smooth animation is required, 25 frames (or even 30 fps) may not
  329. be enough. The extra smoothness of motions can be achieved by showing a
  330. new image in each video field. The PAL system, for example, shows 50
  331. individual fields per second. Nevertheless, because of the interlaced
  332. nature of the PAL system, each field includes only one half of the
  333. vertical picture lines.
  334.  
  335. Therefore, rendering full video resolution images for field-rate recording
  336. means wasting one half of the rendering time and picture information.
  337.  
  338. REAL 3D includes a special function for more efficient field rendering.
  339. For example, if you want to render an animation using a HIRES-Interlaced
  340. Amiga screen mode:
  341.  
  342. 1. Create the animation.
  343.  
  344. 2. Select Project/Environment/Open Screen and select a suitable HIRES
  345.    screen mode. Do NOT select an Interlaced screen mode. After opening the
  346.    screen, open a borderless View on it.
  347.  
  348. 3. Open the render settings requester for the View window, and define
  349.    normal settings as you wish.
  350.  
  351. 4. Activate the "Field rendering" gadget.
  352.  
  353. 5. Render the animation.
  354.  
  355. If you want to render fields using the External screen, its library must
  356.    support non-interlaced (or vertically halved) resolutions.
  357.  
  358. When rendering fields to disk files, do the following:
  359.  
  360. 1. Create the animation.
  361.  
  362. 2. Open the render settings requester for the View window, which you are
  363.    going to use in rendering. Set the output to a file and define other
  364.    settings as you wish.
  365.  
  366. 3. Activate the "Field rendering" gadget.
  367.  
  368.                              - TUTORIAL 5.19 -
  369.  
  370. 4. Define the image resolution and use the halved vertical resolution.
  371.    For example Width = 736, Height = 282.
  372.  
  373. 5. Define the aspect ratio. It should be twice the normal ratio: for PAL,
  374.    Pixel h/w = 2.0 is quite suitable.
  375.  
  376. 6. Render the animation.
  377.  
  378. 5.19 MOTION BLUR
  379.  
  380. The following example shows how to use the motion blur effect in your
  381. animations.
  382.  
  383. 1. Create the animation as normal. The effect is visible (and necessary)
  384.    only when the animation contains objects moving quite fast. As a
  385.    general rule, an object should move at least 10-20 pixels between two
  386.    frames before the blur produces noticeable results.
  387.  
  388. 2. Select the objects to which you want to apply motion blur, select the
  389.    function Modify/Properties/Attributes and activate the "Motion blur"
  390.    gadget. Then select OK. Use the effect only to the objects which are
  391.    moving the fastest because motion blur calculations require significant
  392.    amounts of extra rendering time and ram memory.
  393.  
  394. 3. Define the render settings as usual, but set the anti-aliasing to
  395.    level 2 or higher. The anti-aliasing factor affects the motion blur
  396.    calculations.
  397.  
  398. Note:
  399. That Draft and Outline modes do not support motion blur.
  400.  
  401. 4. Open the animation window and define its settings. Adjust the "Smpl."
  402.    gadget (temporal sampling) to the value 1 instead of 0.
  403.  
  404. 5. Render the animation.
  405.  
  406. You may have to increase the temporal sampling value and the anti-aliasing
  407. factor (try 3 or 4) if a blurred object is moving very fast.
  408.  
  409. 5.20 TROUBLESHOOTING
  410.  
  411. The following list shows some possible problem situations and how to
  412. recover from them.
  413.  
  414. 5.20.1 Not Enough Memory
  415.  
  416. The rendering engine of REAL 3D uses ram memory to speed up rendering.
  417. This means that rendering of complex scenes uses all the memory available.
  418. When multiple windows are ray-traced simultaneously (e.g. when rendering
  419. an animation), some rendering tasks may run out of memory.
  420.  
  421. Suggestions:
  422.  
  423. 1. Close other programs.
  424.  
  425. 2. Close unused windows and screens in your REAL 3D environment. If you
  426.    render an animation, leave only one screen with one View window open.
  427.  
  428. 3. Check Render settings
  429.  
  430. - Try using simpler rendering mode, e.g Lampless instead of Normal.
  431.  
  432. - If you use mesh surfaces, check that B-spline->Phong gadget is not
  433.   selected, or use lower Subdivision value.
  434.  
  435.                              - TUTORIAL 5.20 -
  436.  
  437. - Check Memory usage menu function. If your environment has been created
  438.   in another workstation and fixed memory usage is specified, the
  439.   rendering engine will make the wrong assumptions of the amount of total
  440.   memory. Select "Relative" memory handling with 100% usage (sometimes
  441.   lowering the memory percentage may help because the renderer may end up
  442.   using low memory algorithms instead of fastest possible ones).
  443.  
  444. - Use a lower light sampling value if you are using line/wall light
  445.   sources.
  446.  
  447. 4. Simplify the model:
  448.  
  449. - Use B-Splines meshes instead of dense Phong shaded meshes.
  450.  
  451. - Use less dense meshes.
  452.  
  453. - Use quadric primitives instead of meshes.
  454.  
  455. - Use smaller texture maps files with materials
  456.  
  457. 5. Do not use motion blur, or use lower "smpl" value.
  458.  
  459. 6. Switch Undo feature off before rendering.
  460.  
  461. 5.20.2 Disappearing objects
  462.  
  463. If an object, whose wireframe you can see, does not exist in shaded
  464. images, check the following points:
  465.  
  466. 1. Use Modify/Properties/Attributes to check the object attributes.
  467.    Deselect the RT-invisible, Light-source and Mapping gadgets. Also,
  468.    check the object attributes of parent objects.
  469.  
  470. 2. Make sure that none of the objects outside Boolean operation levels has
  471.    the "Inverted" attribute set. An inverted, finite object in the
  472.    beginning of the hierarchy tree may fill the whole space and replace
  473.    other objects with its volume.
  474.  
  475. 3. If you are using transparent, overlapping objects, check the hierarchy
  476.    order. For example, a planet inside a gas cloud should be ordered so
  477.    that the planet is above the gas cloud in hierarchy.
  478.  
  479. 4. Make sure that you are not using the "View/Render/Selected" option.
  480.  
  481.                              - TUTORIAL 5.21 -
  482.  
  483. Chapter 6 ANIMATION SYSTEM
  484. --------------------------
  485.  
  486. In this chapter you will be acquainted with basic features of the
  487. animation system of REAL 3D. The approach is very example oriented and
  488. after a few pages, you will be able to create animations of swimming
  489. fishes, walking robots, flying birds and so on.
  490.  
  491. This section is not meant to be a tutorial for freeform modelling or any
  492. other object construction techniques, so all objects we will use are very
  493. easy and fast to create.
  494.  
  495. The animation examples can be found from the software package. It might be
  496. a good idea to take a look at them before you go any further, just to
  497. verify that you know where to find them while following the tutorial. All
  498. the scene files are included, so if you cannot create any of these
  499. examples, you can compare your objects to those found from the "Examples/
  500. Animation" directory and find out the reason for the failure.
  501.  
  502. Right, it is time to pop into the first example. Start REAL 3D with one
  503. View and one Select window. Because we are going to render our animations
  504. using only wireframes, use a four color screen (depth = 2) to keep window
  505. refreshing rates high.
  506.  
  507. 6.1 PATH
  508.  
  509. One common way to create animations is to move objects along a path. A
  510. path can be a straight line, a smooth curve, an ellipse, a perfect circle
  511. or whichever three dimensional path you might like to create. The method
  512. called PATH is designed for that purpose and can be used for defining all
  513. kinds of motions for objects.
  514.  
  515. 6.1.1 Move Object along a Path
  516.  
  517. Let's create a simple logo text which moves along a path.
  518.  
  519. 1. Create one level object called "Logo" by selecting the menu Create/
  520.    Structure/Level and renaming it with the function Modify/Properties/
  521.    Name.
  522.  
  523. 2. Create four 3D characters under "Logo" level using the function Create/
  524.    Visibles/Polyhedron.
  525.  
  526. 3. Create one method object at the same level with "Logo" object: select
  527.    the menu Create/Structure/Method, select PATH and click OK. Rename your
  528.    object as "Mover" so you can easily recognize it later.
  529.  
  530. 4. Create one closed curve (e.g. Controls/B-Spline Closed) under the
  531.    method object. This curve defines the path for the logo.
  532.  
  533.    Your animation is now ready, as far as REAL 3D is concerned. In order
  534.    to play it, select the menu Animate/Control/Play_Forwards and you will
  535.    see how your 3D logo text follows the path.
  536.  
  537. Figure T6-1: 3D Logo Following a B-Spline Path.  (PICTURE: T6-1)
  538.  
  539.                              - TUTORIAL 6.1 -
  540.  
  541. Lets go through the terminology used in this example. Make sure you fully
  542. understand the following description because we will use these terms
  543. throughout this section.
  544.  
  545. - Objects to be animated are called "target" objects. They can be all
  546.   kinds of objects like primitives, light sources, textures or perhaps
  547.   other animated hierarchical objects.
  548.  
  549. - A "Method" object modifies "target" objects so that the result is an
  550.   animation.
  551.  
  552. - The curve inside the method object is called a "parameter" object.
  553.   Method objects use "parameter" objects to decide how to animate targets
  554.   (in this case, what kind of path the logo text should follow). A
  555.   parameter object can be any "evaluable" object like a polygonal line,
  556.   circle or even a freeform mesh.
  557.  
  558. In other words, "method" objects modify "target" objects according to the
  559. "parameters" of "methods".
  560.  
  561. 6.1.2 Move Objects along a Path Like a Snake
  562.  
  563. In the previous example, all 3D characters were created inside one level
  564. object called "Logo" so there was only one target object for "Mover".
  565. If we created all characters at the same level with "Mover", the result
  566. would be quite different. Lets try this:
  567.  
  568. 1. Delete the current project with Project/Project/New and create four 3D
  569.    characters under the root object.
  570.  
  571. 2. Create PATH method object at the same hierarchy level with the
  572.    characters.
  573.  
  574. 3. Create a B-Spline curve under the method object so the curve passes
  575.    through all the characters.
  576.  
  577. Figure T6-2: "Move along a Path like a Snake" Animation.  (PICTURE: T6-2)
  578.  
  579. Animate/Control/Play_Forwards the animation and the PATH method object
  580. moves the target objects individually.
  581.  
  582. 6.1.3 Bouncing Sphere
  583.  
  584. As you have probably already noticed, the PATH method can produce
  585. accelerations and decelerations according to distances between subsequent
  586. knot points of the parameter curve used longer the distance for defining
  587. the motion. The between subsequent knots, the higher the speed and vice
  588. versa.
  589.  
  590. This example shows one advantage of the Real's animation system: all
  591. information needed for animating objects is a natural part of the object
  592. itself. When duplicating an object (e.g. bouncing sphere), all animation
  593. data will be duplicated as well, ie. the result will be two bouncing
  594. spheres. Bouncing spheres (or any other animated objects) can be saved and
  595. loaded back and they still continue "bouncing".
  596.  
  597.                              - TUTORIAL 6.2 -
  598.  
  599. To create a bouncing sphere:
  600.  
  601. 1. Create one sphere to the top left edge of the window.
  602.  
  603. 2. Now we define a motion for the sphere, as shown in the following
  604.    picture. Select the function Animate/Create/Path and draw a B-Spline
  605.    control polygon curve, which defines the motion for the sphere. By
  606.    creating triple points, it is possible to define zero speeds;
  607.    therefore, click the three first control points to the center point of
  608.    the sphere so the speed of the sphere in the beginning will be zero.
  609.    The deeper the sphere falls, the higher the speed ie. longer the
  610.    distance between the control points should be. Finish the curve by
  611.    <RMB> click.
  612.  
  613. 3. REAL 3D creates a level under which it puts the sphere and the method
  614.    with its parameter path. Rename the new level object as "Boing".
  615.  
  616. Figure T6-3: Bouncing Sphere. The higher the distance between the knots
  617.              the higher the speed.  (PICTURE: T6-3)
  618.  
  619. 4. Now your have created a bouncing sphere which consists of a actual
  620.    sphere primitive and one PATH method. Play it and it bounces.
  621.  
  622. 5. Animate/Control/Play_Backwards the animation.
  623.  
  624. 6. Now, duplicate the "Boing" object, move it a bit and play the
  625.    animation. The result is two bouncing spheres.
  626.  
  627. 7. When you played the animation, both spheres started to move immediately
  628.    and they reached the end points of their paths at the end of the
  629.    animation. However , this can be changed by defining start and end
  630.    times for methods. Select the method moving the first sphere, select
  631.    Modify/Properties/Animation and activate Start and End gadgets. Change
  632.    end time from its default (1) to 0.7. This means that the method starts
  633.    to work immediately but stops when the time reaches 0.7. Do the same
  634.    for the method of the second sphere, but now use values Start=0.4,
  635.    End=1.0.
  636.  
  637. Play the animation and the spheres bounce.
  638.  
  639. 6.1.4 Hierarchical Animations and Bouncing Sphere
  640.  
  641. In this example we will learn how to create hierarchical animations. In
  642. other words, how to animate objects which are already animated.
  643.  
  644. Let's consider the following situation: a sphere bounces up and down by
  645. following a circular path while another method moves the whole system
  646. along another path.
  647.  
  648. 1. Create one sphere and select the menu Animate/Create/Path. Define a
  649.    nice path which moves the sphere only up and down. Use <BACKSPACE> key
  650.    to close the curve. Then rename the level object "ellipsoid" to
  651.    "UpDown".
  652.  
  653.                              - TUTORIAL 6.3 -
  654.  
  655. 2. Select the method object (you find it under "UpDown") and redefine the
  656.    Frequency of it to 10 using the Modify/Properties/Animation requester.
  657.  
  658. 3. Animate/Control/Play_Forwards the animation; the sphere bounces up and
  659.    down 10 times during the animation.
  660.  
  661. 4. Select Animate/Control/Goto Beginning to reset the time back to zero.
  662.  
  663. 5. Select the object "UpDown" and define a new horizontal motion for it
  664.    using the function Animate/Create/Path.
  665.  
  666. Play the animation and the sphere bounces up and down while it follows
  667. another path.
  668.  
  669. Figure T6-4: A hierarchical animation. An object moves along a path while
  670.              they both follow another path.  (PICTURE: T6-4)
  671.  
  672. 6.1.5 Move Elastic B-Spline Mesh along a Path
  673.  
  674. This example shows how a B-Spline can be subdivided using groups, and
  675. how these groups can be animated so the mesh moves along a path; a bit
  676. like a flying carpet.
  677.  
  678. 1. Create a mesh using the function Create/Freeform/Mesh. The default
  679.    size of 8x8 is fine.
  680.  
  681. 2. Select the function View/Drawing_Set and set the C.Polyg gadget and
  682.    deselect the Curve gadget. This allows you manipulate B-Spline mesh
  683.    through its control polygon.
  684.  
  685. 3. Make the mesh the current level by double clicking it on the Select
  686.    window. Make sure it is still selected.
  687.  
  688. 4. Subdivide the mesh horizontally to subgroups (create "columns", not
  689.    "rows") by dragging while holding the <CTRL> and <SHIFT> keys.
  690.  
  691. 5. Select the menu Create/Structure/Method, choose the PATH method and
  692.    click OK, to create a path method to the same level with the groups.
  693.  
  694. 6. Make the PATH method object the current level and create a path using
  695.    the function Create/Control/B-Spline_Ctrlp. Close the path with
  696.    <BACKSPACE> and end it with <RMB>.
  697.  
  698. Play the animation and your mesh will follow the path looking very
  699. elastic.
  700.  
  701. Figure T6-5: Elastic Mesh Following a Path.  (PICTURE: T6-5)
  702.  
  703.                              - TUTORIAL 6.4 -
  704.  
  705. 6.1.6 Talking Head
  706.  
  707. This example demonstrates how path and groups can be used for creating
  708. animated freeform objects like talking heads. The idea is very simple:
  709. a group refers to desired points of the head and follows a path.
  710.  
  711. 1. Because a good 3D head would take some minutes to create, let's use
  712.    just one B-Spline curve representing the profile of a face. That can
  713.    be done in seconds. Make the curve the current level.
  714.  
  715. 2. Select desired points by dragging and holding down the <SHIFT> key,
  716.    or use the Extras/Vectors/Lasso function.
  717.  
  718. 3. Create a group object by selecting the menu Create/Structure/Group.
  719.  
  720. 4. Select the menu Animate/Create/Path and define a motion for the mouth.
  721.  
  722. Play the animation and your head talks.
  723.  
  724. Figure T6-6: Freeform Morphing Implemented by Moving a Group along
  725.              a Path.  (PICTURE: T6-6)
  726.  
  727. 6.1.7 Moving Objects along a B-Spline Mesh
  728.  
  729. The idea of using B-Spline meshes for defining motions for objects is
  730. simple and obvious: you don't have to define separate motion for an object
  731. in order to make it climb over a mountain. Instead, the mountain itself
  732. can be used for that purpose.
  733.  
  734. 1. Create three spheres to be moved along a mesh.
  735.  
  736. 2. Create a PATH method object at the same level with spheres by selecting
  737.    the menu Create/Structure/Method.
  738.  
  739. 3. Create a B-Spline mesh inside the method object by selecting the menu
  740.    Create/Freeform/Mesh.
  741.  
  742. 4. Play the animation and your spheres will move along the mesh. Note that
  743.    it can take some time before spheres start to move. Be patient, next
  744.    play starts immediately once all necessary data is defined.
  745.  
  746. You can modify the mesh freely and the spheres will still move along it.
  747. Make it look like a mountain and your spheres will climb over it.
  748.  
  749. Figure T6-7: Move Objects along a Mesh.  (PICTURE: T6-7)
  750.  
  751. 6.1.8 Customized Paths
  752.  
  753. The PATH method requires one parameter which is simply used for defining
  754. how target objects should be moved. The type of the parameter can be any
  755. "evaluable" primitive like a circle, a polygonal line, a B-Spline curve or
  756. even a mesh. Almost all kind of motions can be defined using these paths.
  757. Furthermore, motions can be accumulated by creating hierarchical
  758. animations as we did in the example 6.1.4 "Hierarchical Animations and
  759. Bouncing Sphere".
  760.  
  761. Before we get into the point, remember that the following description
  762. shows you how you can create new "evaluable" primitives. In other words,
  763. you can use them with all methods, not only with PATH.
  764.  
  765. For this example, you have to create one sphere and animate it using the
  766. function Animate/Create/Path. We will use the B-Spline curve to define a
  767. path for the sphere, and a formula to fine-tune the path so the sphere
  768. vibrates while it moves along the path.
  769.  
  770. 1. Select the B-Spline curve and select the menu Modify/Properties/Tags.
  771.    Add the following TAG to the curve:
  772.  
  773.    SFOR x+=0.2*sin(t*20*PI), y+=0.2*cos(t*20*PI)
  774.  
  775. 2. Play the animation and sphere vibrates while it moves along the curve.
  776.  
  777. The variable "t" is a time, and "x", "y" and "z" define points in the
  778. curve corresponding the time. See the reference section for full
  779. description of variables for evaluable parameters.
  780.  
  781. Now you can save this customized curve and whenever you need this kind of
  782. vibrating curve, just load it in.
  783.  
  784. If formulas cannot be used for solving your problem, you can write a RPL
  785. function where you can use conditional expressions like IF ELSE ENDIF,
  786. loops like DO LOOP, variables, etc. to define desired motions for your
  787. objects. Lets consider the following situation: a sphere follows a
  788. B-Spline path and when animation reaches the middle point, the sphere
  789. starts to vibrate. In order to do this, you have to create a RPL program
  790. which uses IF ENDIF structure:
  791.  
  792. 1. Start you favorite text editor, write the following RPL program and
  793.    save it as "vibrapath.rpl":
  794.  
  795.      : VibratePath
  796.       t F@ 0.5 F> (if t > 0.5)
  797.       IF
  798.         "x+=0.2*sin(t*20*PI), y+=0.2*cos(t*20*PI)"
  799.       EVAL DROP
  800.    ENDIF
  801.    ;
  802.  
  803. 2. Create another sphere following another path and attach the following
  804.    tag to the B-Spline curve:
  805.  
  806.    SRPL VibratePath
  807.  
  808. 3. Execute your RPL program by selecting the menu Project/Macros/Execute
  809.    Named and by selecting the file "vibrapath.rpl".
  810.  
  811. Play the animation and the sphere starts to vibrate as soon as the time
  812. reaches the value 0.5.
  813.  
  814. It is about time to leave PATH method now (there is still 23 other methods
  815. to go through). Examples we have gone th rough so far should give you some
  816. ideas about how to solve all possible and impossible "move along"
  817. problems.
  818.  
  819.                              - TUTORIAL 6.6 -
  820.  
  821. 6.2 ROTATION
  822.  
  823. Where PATH method can be used for moving objects along parameter objects,
  824. ROTATION method allows you to rotate objects around parameters. As a
  825. default, target objects are rotated one revolution with a constant speed.
  826.  
  827. Use Perspective projection in the following examples so it easier to see
  828. how objects are rotated.
  829.  
  830. 6.2. 1 Rotating Objects Around an Axis
  831.  
  832. 1. Create a Cube
  833.  
  834. 2. Create a ROTATION method: select the menu Create/Structure/Method,
  835.    choose ROTATION from the method list and press OK.
  836.  
  837. 3. Create an axis inside the method object by selecting the menu Create/
  838.    Controls/Axis.
  839.  
  840. Play the animation and your cube will rotate around the axis.
  841.  
  842. Figure T6-8: A Cube Rotates around an Axis with a Constant Spegd.
  843.              (PICTURE: T6-8)
  844.  
  845. The only non-obvious thing here is the direction of the rotation. It is
  846. defined using so called Right Hand Rule: if the thumb of your right hand
  847. points along the axis, your fingers show the direction of rotation. In
  848. other words, if you change the direction of the axis by mirroring it,
  849. the rotation direction will be reversed, too.
  850.  
  851. 6.2.2 Rotating with Different Speeds and Directions
  852.  
  853. In this example, we are going to create several objects rotating with
  854. different speeds and directions.
  855.  
  856. 1. Create one cube, one polyhedron and one pyramid
  857.  
  858. 2. Select the cube and the menu Animate/Create/Rotation. This function
  859.    allows you to define rotations by defining a "coordsys" primitive.
  860.    Play the animation and you cube will be rotated around the "x" axis of
  861.    the coordsys primitive. Then select Animate/Control/Goto Beginning.
  862.  
  863. Figure T6-9: Modifying Rotation Attributes.  (PICTURE: T6-9)
  864.  
  865.                              - TUTORIAL 6.7 -
  866.  
  867. 3. Select the method object which makes your cube to rotate and select the
  868.    menu Modify/Properties/Animation. Activate Start, End and Frequency
  869.    gadgets and define following values for them:
  870.  
  871.      Start     = 0.0
  872.      End       = 0.3
  873.      Frequency = 0.33
  874.  
  875. This makes your cube to rotate only one third of the full cycle during the
  876. time interval 0 ... 0.3. Then it will stop.
  877.  
  878. 4. Now select the polyhedron and apply Animate/Create/Rotation to it.
  879.    Then select the new method and define following values for Start,
  880.    End and Frequency.
  881.  
  882.      Start     = 0.3
  883.      End       = 0.6
  884.      Frequency = 0.5
  885.  
  886. This will freeze the polyhedron until the time reaches the value 0.3.
  887. Then the polyhedron rotates 180 degrees and stops when the time reaches
  888. the value 0.6.
  889.  
  890. 5. Select the pyramid, apply the function Animate/Create/Rotate to it
  891.    and define following values for its ROTATION method:
  892.  
  893.      Start     = 0.6
  894.      End       = 1.0
  895.      Frequency = -1
  896.  
  897. This will make the pyramid rotate -360 degrees when the time reaches
  898. the value 0.6.
  899.  
  900. Play the animation and see how the objects perform their rotations one
  901. after another.
  902.  
  903. 6.2.3 Hierarchical Rotations
  904.  
  905. Rotations can be hierarchically nested just like paths can.
  906.  
  907. 1. Create a rectangle
  908.  
  909. 2. Make it rotate around its left edge by selecting the menu Animate/
  910.    Create/Rotation.
  911.  
  912. 3. Select the function Modify/Structure/Copy; this copies the rotating
  913.    rectangle to the clip buffer.Then make the level containing the
  914.    original rectangle and the rotation method the current level.
  915.  
  916. 4. Paste the rotating rectangle from the clip buffer using Modify/
  917.    Structure/Paste. Move the pasted copy to the left a bit and make it
  918.    the current level.
  919.  
  920. 5. Paste and move once more and play your animation. It will behave very
  921.    nicely.
  922.  
  923. Figure T6-10: Hierarchically Animated Rectangles.  (PICTURE: T6-10)
  924.  
  925.                              - TUTORIAL 6.8 -
  926.  
  927. 6.2.4 Tornado
  928.  
  929. Before trying the following example, select the menu View/Drawing Set and
  930. switch off the Curve gadget and turn on the C.Polyg gadget. This allows
  931. you to handle your B-Spline mesh through control polygon and speeds up
  932. screen refreshing.
  933.  
  934. 1. Create a B-Spline tornado (do it by rotating a profile curve around
  935.    an axis using the function Create/Freeform/Rotate).
  936.  
  937. 2. Make the tornado mesh the current level and subdivide it vertically
  938.    to subgroups using the functions Vector/Lasso and Create/Structure/
  939.    Group. Create one group for each horizontal isoparametric curve of
  940.    the mesh.
  941.  
  942. Figure T6-11: Tornado Mesh Subdivided to sub-groups.  (PICTURE: T6-11)
  943.  
  944. 3. Switch the orientation of the view window so you can see the tornado
  945.    from the top and apply Animate/Create/Rotate to all groups so that
  946.    they will rotate around their center points.
  947.  
  948. 4. Now define different speeds for different levels of the tornado (the
  949.    upmost circle should rotate once, the second circle twice etc.). As
  950.    you can remember, this can be accomplished just by modifying the
  951.    frequency of methods.
  952.  
  953. 5. Change the orientation of the View window so that you can see the
  954.    tornado from the side. Open the View/Drawing Set requester, turn on
  955.    the Curve drawing, turn off the Ctrl Polyg. drawing and set Surface
  956.    Subdivision to 5. Then play your animation. Wow, just like a tornado!
  957.  
  958. 6.3 SWEEP
  959.  
  960. Sweep method is designed for rotating objects with arbitrary accelerations
  961. and decelerations. Actually, the sweep is one of the most powerful tools
  962. when creating "character animations", such as walking human beings and
  963. robots.
  964.  
  965. The sweep method requires two parameters: the first one defining a center
  966. point for the rotation and the second one defining how the object is
  967. rotated. Rotation is executed exactly the same way as when the user
  968. rotates objects using the mouse and the function Modify/Linear/Rotate.
  969. Thus the first parameter is usually just an offset primitive, and the
  970. second some kind of curve defining a route for some point of the object.
  971. The method tries to move that point along the defined path while keeping
  972. the point defined by the first parameter fixed, making the object rotate.
  973.  
  974. 6.3.1 Walking Legs
  975.  
  976. 1. Draw a thigh-bone profile using a B-spline curve.
  977.  
  978. 2. Select the function Animate/Create/Sweep and define the center point
  979.    for rotation. Because your thigh-bone usually rotates about hip-bone,
  980.    click <LMB> over the upper end of the bone.
  981.  
  982. 3. Draw a closed path for the knee (lower end of the thigh-bone); use
  983.    <BACKSPACE> and <RMB> to close and end the path definition.
  984.  
  985.                              - TUTORIAL 6.9 -
  986.  
  987. 4. Make the new level created by the Sweep function the current level
  988.    and create the shin-bone at the same hierarchy level with the
  989.    thigh-bone.
  990.  
  991. 5. Apply the function Animate/Create/Sweep to the shin-bone so the shin-
  992.    bone will be rotated about the knee-cap.
  993.  
  994. Figure T6-12: Structure of a Leg.  (PICTURE: T6-12)
  995.  
  996. The upper end of the thigh-bone is fixed to the hip while the knee
  997. follows a B-Spline curve. The upper end of the shin-bone is fixed to the
  998. knee while a route for the ankle is defined by a B-Spline. Because of
  999. hierarchical construction, the parameters used for rotating shin-bone are
  1000. rotated with the thigh-bone.
  1001.  
  1002. Play the animation and your leg should behave a bit like a real leg.
  1003. However, in order to make it work perfectly, we have to analyze how a real
  1004. leg works.
  1005.  
  1006. The first observation is that the shin-bone and the thigh-bone comprise a
  1007. straight line until the leg starts to return back from its back position.
  1008. In other words, our shin-bone should not be rotated until the time reaches
  1009. the value 0.5. So, define the Start time value of the hip-bone sweep
  1010. method to that value, set the End time value to 1.0 and play the
  1011. animation. Now the shin-bone should not be rotated until the leg starts
  1012. to rotate back to its starting position. How to create another leg?
  1013.  
  1014. 1. Duplicate the leg. Now you have two equally functioning legs.
  1015.  
  1016. 2. Select the method rotating the thigh-bone of the duplicated leg and
  1017.    define the Phase = 0.5 using the function Modify/Properties/Animation.
  1018.  
  1019. Play the animation and ... you have walking legs.
  1020.  
  1021. 6.3.2 Tracking Guns
  1022.  
  1023. In this example, we will show you how to use "Links" to use same objects
  1024. to define motions for different methods. Any parameter object of a method
  1025. can be replaced by a link object which points to the actual parameter.
  1026. The parameter can be everywhere in the object hierarchy and more than one
  1027. link can point to it.
  1028.  
  1029. Lets consider the following situation: a sphere follows a path and no
  1030. matter where it goes, gun always points towards it. To do this:
  1031.  
  1032. 1. Create a sphere and define a path for it using Animate/Create/Path.
  1033.  
  1034. 2. Create a level object and name it as "Gun", at the same level with the
  1035.    moving sphere object. Make it the current level.
  1036.  
  1037. 3. Create a gun object under the level, pointing to the sphere.
  1038.  
  1039. 4. Select Create/Structure/Method and create a SWEEP method. Create it at
  1040.    the same level where the gun shape is; the purpose is to animate the
  1041.    gun. Make the method level the current level.
  1042.  
  1043. 5. Define a center of rotation for the gun by creating an offset primitive
  1044.    under the method level; this is the first sweep parameter.
  1045.  
  1046.                              - TUTORIAL 6.10 -
  1047.  
  1048. 6. Select the B-Spline curve used for defining a motion for the sphere and
  1049.    select the function Create/Structure/Link. Select the "link" and
  1050.    Modify/Structure/Cut it. Then make the gun sweep method the current
  1051.    level and Modify/Structure/Paste the link under the method. The link
  1052.    will act as the second sweep parameter.
  1053.  
  1054. Play the animation, and your gun is rotated so it always points to the
  1055. sphere.
  1056.  
  1057. Create another gun by duplicating the original gun (the whole sweeping
  1058. gun), move it to another place and rotate it so it still points to the
  1059. sphere, and when you play the animation, both guns follow the sphere.
  1060.  
  1061. Figure T6-13: Four Guns Pointing to a Sphere.  (PICTURE: T6-13)
  1062.  
  1063. The rotations for all guns as well as the motion for the sphere are all
  1064. defined by the same curve.
  1065.  
  1066. Now, modify the sphere path using Modify/Freeform/Move Knotpoint function
  1067. and play the animation. All guns have automatically changed their behavior
  1068. so they still keep pointing to the sphere!
  1069.  
  1070. 6.4 SIZE
  1071.  
  1072. The size method can be used for sizing objects during animations. It takes
  1073. two parameters: the first one (usually the offset primitive) is used for
  1074. defining the center point of sizing and the second (usually some sort of
  1075. curve) defines how target objects are sized about the center point.
  1076.  
  1077. Whenever you have to change the size of an object in your animation, this
  1078. method can be used for that purpose.
  1079.  
  1080. 6.4.1 Beating Spheres
  1081.  
  1082. 1. Create a sphere
  1083.  
  1084. 2. Select the menu Animate/Create/Size and click the mouse once over the
  1085.    center point of the sphere. Then define a long, arbitrary curve which
  1086.    starts from the surface of the sphere. To create a cyclic animation,
  1087.    close the path with <BACKSPACE> key.
  1088.  
  1089. Play the animation and your sphere "beats".
  1090.  
  1091. Figure T6-14: A Beating Sphere  (PICTURE: T6-14)
  1092.  
  1093.                              - TUTORIAL 6.11 -
  1094.  
  1095. Just to raise our enthusiasm a bit, let's create some more beating
  1096. spheres:
  1097.  
  1098. 1. Create ten beating spheres by duplicating and moving the copies so the
  1099.    spheres form a circular path (use a duplicate+rotate macro, if you
  1100.    have mastered macros).
  1101.  
  1102. 2. Change the Phase (Modify/Properties/Animation) of each size method so
  1103.    the phase of the first method is 0, the second is 0.1 etc.
  1104.  
  1105. Play the animation and you have ten nicely beating spheres, producing a
  1106. kind of wave effect.
  1107.  
  1108. 6.4.2 Bubbles
  1109.  
  1110. Let's create an animation, where a bubble gets bigger and bigger until it
  1111. becomes unfastened and starts to move up, like a steam bubble in a
  1112. boiling water.
  1113.  
  1114. 1. Create a sphere representing a bubble near the bottom edge of the
  1115.    View window.
  1116.  
  1117. 2. Select the function Animate/Create/Size while the sphere is selected
  1118.    and click the mouse in the point where the sphere is fastened (to a
  1119.    hypothetical pot).
  1120.  
  1121. 3. Draw an open path defining a growing size for the bubble; remember to
  1122.    start the path from the surface of the sphere. As usual, REAL 3D
  1123.    creates a level an puts the sphere and the new method under it.
  1124.  
  1125. 4. Find the size method under the new level, select the method and set
  1126.    Start time to 0 and End time to 0.5 using the function Modify/
  1127.    Properties/Animation. This prevents the bubble from growing after the
  1128.    animation has reached its middle point.
  1129.  
  1130. 5. Select the whole growing bubble level and define a path for it as
  1131.    shown in the picture below.
  1132.  
  1133. 6. Select the path method object created by the previous action, select
  1134.    the function Modify/Properties/Animation and change Start time to 0.5
  1135.    so the method starts to move the bubble as soon as the bubble has
  1136.    become big enough.
  1137.  
  1138. Figure T6-15: Bubble gets bigger and bigger until it is starts to move
  1139.               up.  (PICTURE: T6-15)
  1140.  
  1141. 6.5 STRETCH
  1142.  
  1143. This method can be used for stretching objects in three directions
  1144. separately.
  1145.  
  1146. Stretch method requires two parameters: a coordsys primitive which defines
  1147. the three directions for stretching, and one curve which defines how the
  1148. object is stretched.
  1149.  
  1150. 6.5.1 Elastic Cube
  1151.  
  1152. This example is the simplest possible. One cube is stretched in three
  1153. dimensions by using B-Spline curve.
  1154.  
  1155. 1. Create one cube
  1156.  
  1157. 2. Select the menu Create/Structure/Method and Create a stretch method.
  1158.  
  1159.                              - TUTORIAL 6.12 -
  1160.  
  1161. 3. Create a coordsys primitive under the method level so its origin
  1162.    matches one corner of the cube and the axes match three edges of the
  1163.    cube.
  1164.  
  1165. 4. Create a B-Spline curve under the method so it begins from the corner
  1166.    of the cube opposite to the corner where the origin of the coordsys is.
  1167.  
  1168. Note:
  1169. That you can draw a three dimensional curve by swapping the orientation
  1170. of your View window while outlining the curve.
  1171.  
  1172. Figure T6-16: Elastic Cube  (PICTURE: T6-16)
  1173.  
  1174. Play the animation. One corner of the cube follows the curve while another
  1175. corner is fixed to the origin of the coordsys.
  1176.  
  1177. 6.5.2 Bouncing Elastic Sphere
  1178.  
  1179. We have already created one bouncing sphere. However, it did not act like
  1180. an elastic sphere. We can use the stretch method to add the elasticity
  1181. effect to sphere bouncing:
  1182.  
  1183. 1. Create a sphere near the top left edge of the window.
  1184.  
  1185. 2. Select the menu Animate/Create/Stretch and create a closed curve which
  1186.    stretches the sphere nicely.
  1187.  
  1188. 3. Select the stretch method and modify its start/end times so stretching
  1189.    starts when the time reaches the value 0.4 and stops when the time
  1190.    reaches 0.6.
  1191.  
  1192. 4. Select the level which contains both the sphere and the stretch method
  1193.    and apply Animate/Create/Path function to it. Define a path similar to
  1194.    one we defined in our earlier bouncing sphere example.
  1195.  
  1196. Figure T6-17: A Bouncing Sphere with Collision Deformation.
  1197.               (PICTURE: T6-17)
  1198.  
  1199. Play the animation and the sphere starts to fall until it hits the floor
  1200. at the time of 0.4 and rebounds back nicely.
  1201.  
  1202. 6.6 DIRECTION
  1203.  
  1204. Welcome to the world of swimming fishes and wriggling snakes! The
  1205. DIRECTION method works like the path method, except that it also rotates
  1206. target objects so that their orientation changes according to the
  1207. curvature of the parameter path.
  1208.  
  1209.                              - TUTORIAL 6.13 -
  1210.  
  1211.  
  1212. 6.6.1 Move a Logo Text along a Direction Path
  1213.  
  1214. In order to make the difference clear to the path method, we will create
  1215. exactly the same object as we did in the example 6.1.2 "Move objects
  1216. along a path like a snake", except that now we use the direction method.
  1217.  
  1218. 1. Create some 3D characters.
  1219.  
  1220. 2. Create a DIRECTION method to the same hierarchy level with the
  1221.    characters.
  1222.  
  1223. 3. Create a closed B-Spline curve under the direction method level (see
  1224.    the figure below).
  1225.  
  1226. Play the animation and all the characters move along the path while they
  1227. are rotated according to the curvature of the path.
  1228.  
  1229. Figure T6-18: Logo Text Following a Directed Path.  (PICTURE: T6-18)
  1230.  
  1231. It is this rotation feature which makes this method very valuable when
  1232. animating freeform objects.
  1233.  
  1234. 6.6.2 Swimming Fish 
  1235.  
  1236. Let's create a fish:
  1237.  
  1238. 1. Create a freeform fish (or a snake or any other creature whose length
  1239.    it greater than its thickness).
  1240.  
  1241. 2. Make the fish the current level and subdivide it to groups from the
  1242.    tail to the head.
  1243.  
  1244. 3. Create a DIRECTION method to the same level with the groups.
  1245.  
  1246. 4. Create a closed B-Spline path representing the route the fish swims,
  1247.    at the same level with the fish primitive (one level upwards from the
  1248.    groups).
  1249.  
  1250. 5. Select the B-Spline curve representing the path for the fish, select
  1251.    the menu Create/Structure/Link and Cut and Paste it under the method
  1252.    object.
  1253.  
  1254. Play the animation to make the fish swim along the path.
  1255.  
  1256. Figure T6-19: Swimming B-Spline Fish  (PICTURE: T6-19)
  1257.  
  1258. Note:
  1259. That a curved path makes your fish swim like a fish. If the curve contains
  1260. no small bends, your creature acts like a slug: it does not wriggle. It
  1261. may take some time to fully learn to know the nature of this method, but
  1262. the results are worth the effort!
  1263.  
  1264.                              - TUTORIAL 6.14 -
  1265.  
  1266. 6.7 MOVE & DIR
  1267.  
  1268. As you probably have already realized, the direction method is a very
  1269. powerful way to create many kinds of nice animations. However, there are
  1270. situations where you have to control the direction of the object
  1271. independently from the motion; that is not possible with the direction
  1272. method, because it uses the same curve to define both the direction and
  1273. the motion. MOVE & DIR method is designed for these situations.
  1274.  
  1275. The move & dir method uses two parameters: the first one defines a motion
  1276. for target objects just as the path method parameter does, and the second
  1277. parameter defines the direction for the targets just as the direction
  1278. method parameter does. This means that if both parameter curves are equal,
  1279. the method will work exactly the same way as the direction method does and
  1280. if the parameter defining the direction is a straight line, the method
  1281. works similar to the path method (because the direction of the object
  1282. remains constant).
  1283.  
  1284. 6.7.1 Rocking Logo Moving along a straight Line
  1285.  
  1286. In this example we will create a logo which consists of characters. Each
  1287. character follows a perfectly straight path (an axis). A B-Spline curve
  1288. is used for defining the direction information so that the logo will move
  1289. very nicely.
  1290.  
  1291. 1. Create four small 3D characters as shown in the picture below.
  1292.  
  1293. 2. Create a MOVE & DIR method to the same level with the characters.
  1294.  
  1295. 3. Use Create/Controls/Axis to create a Straight line under the method
  1296.    level, so it passes through the characters.
  1297.  
  1298. 4. Create a B-Spline curve under the method level. In the beginning, the
  1299.    curve should follow the axis accurately but then starts to oscillate.
  1300.  
  1301. Figure T6-20: Rocking Logo Following a Straight Line.  (PICTURE: T6-20)
  1302.  
  1303. Play the animation, and if you are not happy with the way the characters
  1304. are rotated while they follow the straight line, just modify the second
  1305. curve. If you don't like the straight line, use any other curve type or
  1306. even a mesh (just like we did in the "Move Along a Mesh" example).
  1307.  
  1308. Note that you can use the second curve to define rotations in all three
  1309. dimensions! The direction curve does not have to be planar as it was in
  1310. this example. Naturally, the curve can define rotations which are
  1311. perpendicular to the motion direction (rocking boat...).
  1312.  
  1313. 6.7.2 The Rally Driver
  1314.  
  1315. In this example we will show you how "Move & Dir" method can be used for
  1316. creating "driving car like crazy" effects.
  1317.  
  1318. 1. Create a car
  1319.  
  1320. 2. Create a MOVE & DIR method object to the same hierarchy level.
  1321.  
  1322.                              - TUTORIAL 6.15 -
  1323.  
  1324. 3. Create a B-Spline curve representing the road under the method level.
  1325.  
  1326. 4. Duplicate the "road" curve. If you now played the animation, the result
  1327.    would be just "driving car like a reasonable person".
  1328.  
  1329. 5. Modify the second curve so the car starts to behave more aggressively
  1330.    as shown in the following picture.
  1331.  
  1332. Figure T6-21: "Driving like crazy".  (PICTURE: T6-21)
  1333.  
  1334. The first curve represents the road and another curve the direction of the
  1335. car in the corresponding road positions.
  1336.  
  1337. Note that without showing knotpoints it is difficult to solve which points
  1338. of the motion and the direction curves correspond to each other, because
  1339. the speed of the object is defined by the distance of the knots.
  1340.  
  1341. 6.8 CONTROL CURVES
  1342.  
  1343. This method can be used for defining paths for objects by using two
  1344. curves. Target objects are moved, rotated, and stretched according to the
  1345. curves.
  1346.  
  1347. This method is very suitable for defining motions for cameras, aeroplanes,
  1348. etc. where accurate control over banking angle is needed. Just as in the
  1349. PATH, DIRECTION and MOVE & DIR methods, the distance between knot points
  1350. determines the speed of target objects.
  1351.  
  1352. Naturally, control curves can be any evaluable objects, like circles,
  1353. ellipses or just straight lines. The ability to define whether or not the
  1354. second control curve should be used also for scaling target objects make
  1355. the number of possible applications for this method huge.
  1356.  
  1357. 6.8. 1 Beating and Moving Slime Ball
  1358.  
  1359. In this example, we will create a simplest possible example demonstrating
  1360. control curves: one object moving between control curves. The distance
  1361. between control curves varies causing object to pulsate like a "slime
  1362. ball".
  1363.  
  1364. 1. Create a sphere representing a slime ball.
  1365.  
  1366. 2. Create a CONTROL CURVE method object at the same level.
  1367.  
  1368. 3. Create two closed B-Spline curves by drawing one, duplicating it, and
  1369.    modifying the duplicated curve so the distance between the curves
  1370.    varies. Then Animation/Control/Play Forwards the animation, and after
  1371.    that, select Animation/Control/Goto Beginning.
  1372.  
  1373. Figure T6-22: A Slime Ball Stretched and Moved by Control Curves.
  1374.               (PICTURE: T6-22)
  1375.  
  1376.                              - TUTORIAL 6.16 -
  1377.  
  1378. Now, lets create more slime balls. This is exactly what you should do:
  1379.  
  1380. 1. Create two new spheres to different positions and make sure they fit
  1381.    perfectly between the control curves (see the figure above).
  1382.  
  1383. 2. Select the method object. Select the menu Modify/Properties/Tag, click
  1384.    the "ISKE" tag string (one should exist after playing the animation)
  1385.    and click DEL button to delete the tag; then select OK. This asks Real
  1386.    to define "VPHS" tags automatically when you play the animation next
  1387.    time.
  1388.  
  1389. Play the animation and you have three elastic slime balls.
  1390.  
  1391. 6.8.2 Elastic Flying Carpet
  1392.  
  1393. In this example we will show you how to create freeform mesh, which moves
  1394. along control curves like an elastic rubber carpet (if you have not seen
  1395. rubber carpets before, don't worry. I'm sure there are such things as
  1396. rubber carpets). We also demonstrate the use of links just to make sure
  1397. that you get familiar with them.
  1398.  
  1399. 1. Create a mesh using the function Create/Freeform/Mesh.
  1400.  
  1401. 2. Make the mesh the current level by double-clicking it on the Select
  1402.    window; as usual, we will put sub-groups under the freeform level
  1403.    itself.
  1404.  
  1405. 3. Subdivide the mesh horizontally to groups, so each group consists of
  1406.    a column of control points. Note that you have to turn Drawing Set/C.
  1407.    Polyg. representation on (deselect "Curve" gadget at the same time)
  1408.    in order to get access to the control points of the mesh.
  1409.  
  1410. 4. Create a CONTROL CURVES method object.
  1411.  
  1412. 5. Create two control curves to the same level with the the mesh.
  1413.  
  1414. 6. Create two links pointing to the control curves (multi-select the
  1415.    control curves and use the menu Create/Structure/Link).
  1416.  
  1417. 7. Modify/Structure/Cut the links, make the CONTROL CURVES method the
  1418.    current level and Modify/Structure/Paste the links back.
  1419.  
  1420. Figure T6-23: Flying Elastic Carpet.  (PICTURE: T6-23)
  1421.  
  1422. Now, use the function View/Drawing_Set to switch the "Curve"
  1423. representation on and "C. Polyg." off and play the animation. The carpet
  1424. should fly very nicely.
  1425.  
  1426. 6.8.3 Flying Viewpoint
  1427.  
  1428. In this example, we will show you how to define motions for objects
  1429. without stretching them. For example, when creating motions for view-
  1430. points, aeroplanes etc., the possibility to fully control banking is a
  1431. valuable feature. This example also demonstrates how to use viewpoint and
  1432. aimpoint primitives to define the orientation for the camera.
  1433.  
  1434. 1. Create one cube in the middle of the View window so that we have
  1435.    something to watch in the animation.
  1436.  
  1437.                              - TUTORIAL 6.17 -
  1438.  
  1439. 2. Select the perspective projection (View/Type/Perspective) and find a
  1440.    good viewing angle by using the cursor keys.
  1441.  
  1442. 3. Create aimpoint and viewpoint primitives by selecting the menu View/
  1443.    Create Camera. REAL 3D creates the camera representing the current
  1444.    orientation of the View window. The camera object consist of two sub-
  1445.    objects: an aimpoint and a viewpoint. We are going to animate only the
  1446.    viewpoint, so delete the aimpoint primitive. This makes the camera
  1447.    always point to the origin point of the space.
  1448.  
  1449. 4. Create a CONTROL CURVES method at the same level with the viewpoint
  1450.    (Under the "camera" object).
  1451.  
  1452. 5. Create two control curves under the method so that they show the route
  1453.    for both "eyes" of the viewpoint.
  1454.  
  1455. 6. Select the method object and add the following tag to it:
  1456.  
  1457.      FOR I=1
  1458.  
  1459. which tells to the method not to use stretching (for full description of
  1460. "I" variable, see the reference section).
  1461.  
  1462. 7. Activate the View/Observer/Camera View function. You may also use
  1463.    Modify/Properties/Attributes/WF-Invisible to make the camera wireframe
  1464.    invisible during the animation play.
  1465.  
  1466. Play the animation and the eyes of the viewpoint will follow the control
  1467. curves. However, because the aimpoint does not exist, the camera is aiming
  1468. at the origin (at the cube) all the time.
  1469.  
  1470. Figure T6-24: Motion for a Viewpoint Defined by Two Control Curves.
  1471.               (PICTURE: T6-24)
  1472.  
  1473. Note:
  1474. That there are easier ways to create camera flight animations (for example
  1475. key framing), but the ability to control banking accurately may sometimes
  1476. make this method more suitable.
  1477.  
  1478. Lets enter the following section, which leads us into the world of
  1479. Character Animations.
  1480.  
  1481. 6.9 SIMPLE SKELETON
  1482.  
  1483. The idea behind skeletons is quite straight forward: a skeleton is a
  1484. simple object which is somehow connected to more complex object(s).
  1485. When the skeleton is modified, the target object is modified accordingly.
  1486. The fact that it is much easier to modify these skeletons than actual
  1487. (often very complex) target objects, makes the skeletons a very powerful
  1488. animation tool.
  1489.  
  1490. REAL 3D contains two skeleton types which differ from each other in the
  1491. way they manipulate target objects to make them match the skeleton object.
  1492. So, lets first create a SIMPLE SKELETON example and then have a look how
  1493. it works.
  1494.  
  1495.                              - TUTORIAL 6.18 -
  1496.  
  1497. 6.9.1 A SIMPLE SKELETON and a Logo Text
  1498.  
  1499. In this example, we will create a logo text and a skeleton which works as
  1500. an elastic baseline for the text.
  1501.  
  1502. 1. Create four 3D characters.
  1503.  
  1504. 2. Create a SIMPLE SKELETON method to the same level with the characters.
  1505.  
  1506. 3. Create a B-Spline curve (a skeleton curve) under the method level. The
  1507.    curve should match roughly the baseline of the text.
  1508.  
  1509. 4. Select the menu Animate/Control/Refresh.
  1510.  
  1511. Our first skeleton object example is now complete. When you selected the
  1512. menu Animate/Control/Refresh, REAL 3D calculated all information needed to
  1513. keep target objects on the skeleton from now on. So, lets try to modify
  1514. the skeleton curve in order to test how the skeleton works.
  1515.  
  1516. 5. Select the skeleton curve and move it. Now the skeleton is dislocated
  1517.    from its targets. Select the menu Animate/Control/Refresh and you logo
  1518.    text is pulled to the skeleton.
  1519.  
  1520. 6. Modify/Linear/Stretch the skeleton curve and Animate/Control/Refresh.
  1521.    The distance between the characters is stretched, too.
  1522.  
  1523. 7. Bend the skeleton curve, refresh the animation system and your logo is
  1524.    bent, too.
  1525.  
  1526. Figure T6-25: An Object after Bending the Skeleton.  (PICTURE: T6-25)
  1527.  
  1528. As you noticed, the SIMPLE SKELETON method does not rotate or stretch
  1529. target objects in any way. They are just moved back to their original
  1530. positions on the skeleton. In other words, the SIMPLE SKELETON uses only
  1531. "move" transformation to manipulate its targets. This makes this
  1532. skeleton type suitable for animating objects whose direction should not
  1533. be changed during the animation.
  1534.  
  1535. Another observation was that the SIMPLE SKELETON requires one parameter
  1536. which describes the shape of the skeleton. This parameter can be any
  1537. evaluable object like a polygonal line, a B-Spline curve, a circle, a
  1538. point or even a freeform mesh. Furthermore, it is even possible to create
  1539. customized skeletons by creating a new evaluable object, just like we did
  1540. in the PATH example 6.1.8 "Customized Paths".
  1541.  
  1542. The SIMPLE SKELETON method pulls all target objects to the skeleton, so
  1543. that the COG of the target object in question is pulled to the skeleton,
  1544. and the position on the skeleton is defined by the VPHS tag associated
  1545. with the target. For example, if the VPHS value for a target object is 0,
  1546. then the object is pulled to the beginning point of the skeleton curve.
  1547. If VPHS is 1.0, then the target is pulled to the end point of the
  1548. skeleton. The value 0.5 pulls the target to the middle point of the
  1549. skeleton. These values are
  1550.  
  1551.                              - TUTORIAL 6.19 -
  1552.  
  1553. called "parameter values" of the parameter object. The skeleton object
  1554. also redefines the COG for target objects so that it lies exactly on the
  1555. skeleton curve.
  1556.  
  1557. When you selected the menu Animate/Control/Refresh the first time, the
  1558. method automatically defined these tags for each target object by finding
  1559. the parameter value of the skeleton curve where the distance between
  1560. curve and target object was shortest. This was done only once. The method
  1561. created and associated the "ISKE" tag with itself to indicate that all
  1562. necessary tags are now updated and need not be refreshed any more.
  1563.  
  1564. This is the whole theory behind the simple skeleton. As you have already
  1565. noticed, you don't have to know anything about these tags as long as you
  1566. are not going to define positions for target objects manually. Just create
  1567. all necessary objects and let REAL 3D do the rest.
  1568.  
  1569. Lets play with this example a bit more. Select any of the target objects
  1570. and move it apart from the skeleton. Refresh the animation system and the
  1571. object is pulled back to the skeleton!
  1572.  
  1573. Now, suppose that the first target object was positioned improperly and
  1574. you have to change it to a different position in the skeleton. How to move
  1575. targets so that the skeleton method will not pull them back to their
  1576. original positions? The answer is: just delete the tag ISKE associated
  1577. with the method object (or set its value to zero), move target objects to
  1578. the desired positions and refresh the animation system.
  1579.  
  1580. So far, we have actually only tested how the skeletonally controlled
  1581. objects can be manipulated interactively. Now it is time to create our
  1582. first skeleton animation.
  1583.  
  1584. 6.9.2 Rotate a Simple Skeleton around an Axis
  1585.  
  1586. Because skeleton objects are just ordinary objects, they can be animated
  1587. just like any other objects. So, lets create such an animation:
  1588.  
  1589. 1. Create simple logo text consisting of some characters.
  1590.  
  1591. 2. Create a SIMPLE SKELETON method to the same hierarchy level.
  1592.  
  1593. 3. Create a B-Spline curve, passing through the logo characters, under the
  1594.    method.
  1595.  
  1596. 4. Create a ROTATION method to the same level with the skeleton so that
  1597.    the skeleton curve is target for it.
  1598.  
  1599. 5. Create an axis primitive under the path method to define the rotation
  1600.    axis.
  1601.  
  1602. Figure T6-26: A B-Spline curve rotating around an axis while skeletonal
  1603.               control keeps the logo characters attached to the curve.
  1604.               (PICTURE: T6-26)
  1605.  
  1606. Play the animation. The ROTATION method moves the skeleton, while the
  1607. skeleton method keeps the target objects on its parameter curve.
  1608.  
  1609.                              - TUTORIAL 6.20 -
  1610.  
  1611. 6.9.3 Elastic Skeleton and Logo Text
  1612.  
  1613. In this example we are going to add some elasticity to skeletons by moving
  1614. points using groups.
  1615.  
  1616. 1. Create a logo consisting of four characters.
  1617.  
  1618. 2. Create a SIMPLE SKELETON method to the same level with the characters.
  1619.  
  1620. 3. Create a skeleton curve (B-Spline) under the method.
  1621.  
  1622. 4. Make the skeleton curve the current level and create a point group
  1623.    object, consisting of some points of the skeleton.
  1624.  
  1625. 5. Create a PATH method object to the same level with the group.
  1626.  
  1627. 6. Define a motion for the group by creating a B-Spline curve under the
  1628.    path method.
  1629.  
  1630. Figure T6-27: A Skeleton Modified by a Group.  (PICTURE: T6-27)
  1631.  
  1632. 6.9.4 Moving Objects along a Skeleton
  1633.  
  1634. As you already know, the VPHS tag associated to a target object defines
  1635. where the target lies on the skeleton . However , it is possible to define
  1636. this value dynamically using the tag SFOR. This means you can change the
  1637. position of the target during the animation just by writing the formula
  1638. which refers to the time!
  1639.  
  1640. So, let's test this by creating "Move along a Path" animation based on the
  1641. skeleton method.
  1642.  
  1643. 1. Create a sphere (a target object).
  1644.  
  1645. 2. Create a SIMPLE SKELETON method object at the same level.
  1646.  
  1647. 3. Create a B-Spline curve under the method object.
  1648.  
  1649. 4. Selecting the sphere, then select the menu Modify/Properties/Tags.
  1650.    Click ADD gadget and then enter the following tag string: SFOR x=t
  1651.    Hit return and select OK.
  1652.  
  1653. Play the animation and your target object will move along the skeleton,
  1654. because its position on the skeleton is directly defined by the time.
  1655.  
  1656. Figure T6-28: A Sphere Moving along a Skeleton.  (PICTURE: T6-28)
  1657.  
  1658.                              - TUTORIAL 6.21 -
  1659.  
  1660. Well, we could do this simply by using a PATH method, too. However, there
  1661. is a big difference between these two implementations. The PATH defines
  1662. relative motion for targets whereas SKELETON defines absolute position.
  1663. This means that you can move the curve used with the PATH method without
  1664. changing the motion of the targets (because it still defines equal
  1665. relative motion), but if you move the skeleton curve, targets follow a
  1666. different route because they are always pulled back to to the skeleton.
  1667.  
  1668. So, lets analyze what made the sphere actually move along the skeleton.
  1669. The formula "x=t" assigned the current time to the variable "x". The
  1670. skeleton method uses this variable to redefine the value of VPHS tag.
  1671. Actually, the parameter space is three dimensional and also variables
  1672. "y" and "z" are defined, but because we used a B-Spline curve, only the
  1673. first dimension is relevant. A bit later we will show you how to use
  1674. freeform meshes as skeletons, and then we need two dimensions (variables
  1675. x and y) to define a position for the target (for full description of
  1676. variables and methods, see the Reference section).
  1677.  
  1678. All right, lets practice a bit more, by creating a formula which is bit
  1679. more complex and produces a more interesting motion.
  1680.  
  1681. 6.9.5 Rocking Spheres
  1682.  
  1683. The following example demonstrates how to create accelerations by using
  1684. "cos()" function in a formula.
  1685.  
  1686. 1. Create two spheres, one white and one black.
  1687.  
  1688. 2. Add the following tags to the spheres:
  1689.  
  1690.    White sphere: SFOR x=t*0.5+(t)*(0.5+0.5*cos(8*PI*t))
  1691.    Black sphere: SFOR x=t*0.5+(1-t)*(0.50.5*cos(6*PI*t))
  1692.  
  1693. 3. Create a SIMPLE SKELETON method to the same level with the spheres.
  1694.  
  1695. 4. Create a B-Spline curve under the method level as shown in the picture
  1696.    below.
  1697.  
  1698. Figure T6-29: Spheres Rocking along a Skeleton Curve.  (PICTURE: T6-29)
  1699.  
  1700. Play the animation and the spheres will behave in a very natural way.
  1701.  
  1702. Lets analyze the formulas we attached to the target objects. The time (t)
  1703. goes from 0 to 1 in our example when the animation is played. Thus, in
  1704. the beginning, the first part of the formula, "t*0.5", has no effect at
  1705. all. When the animation proceeds, the term "t*0.5" approaches 0.5.
  1706. On the other hand, the rest of the formula "(1-t)*(0.5+0.5*cos(8*PI*t))"
  1707. gets weaker and weaker because "(1-t)" approaches 0. So, in the beginning,
  1708. the function "cos()" causes the sphere to roll up and down in its full
  1709. power but in the end, it does not affect the position of the sphere at
  1710. all.
  1711.  
  1712. If math is not one of your strong points, don't worry, there will be lot
  1713. of nice ready-made formulas available very soon!
  1714.  
  1715.                              - TUTORIAL 6.22 -
  1716.  
  1717. 6.9.6 A Hydrogen Atom and its Electron Orbit
  1718.  
  1719. When creating atom simulations, it is necessary to understand the theory
  1720. involved. If you don't know that theory, don't worry, this example can
  1721. still give you some ideas.
  1722.  
  1723. Some theory first. A hydrogen atom consists of one proton and one
  1724. electron. The way how an electron "rotates" around the proton can be
  1725. described by using a formula which is well known by scientists. Nobody
  1726. knows where the atom is at a certain time value, but a formula can be
  1727. used for calculating probability for that. There are only a few possible
  1728. states the electron can represent.
  1729.  
  1730. So, lets try to implement this.
  1731.  
  1732. 1. First we need an electron. I don't know what a real electron looks
  1733.    like, but I assume it looks a bit like a sphere. So, create a sphere.
  1734.  
  1735. 2. Then we have to define the formula describing the so called probability
  1736.    distribution for the sphere. For simplicity, we use just a random value
  1737.    for that. The variable "rnd" can be used for that purpose. Therefore,
  1738.    select the sphere, select the menu Modify/Properties/Tags and add the
  1739.    following tag to it:
  1740.  
  1741.    SFOR x=rnd
  1742.  
  1743. This generates random values between 0 and 1.
  1744.  
  1745. 3. Create a SIMPLE SKELETON method to the same level with the electron.
  1746.  
  1747. 4. Then we need a new evaluable primitive which represents possible states
  1748.    of the electron. For hydrogen (if I remember correctly) it is a sphere
  1749.    whose radius represents these possible states of electron. However, let
  1750.    us use a circle, whose mathematical formula is very similar to the
  1751.    formula of the sphere, but is shorter and faster to write. The
  1752.    mathematical formula defining a circle is:
  1753.  
  1754.    x = r*sin(2*PI*t)
  1755.    y = r*cos(2*PI*t)
  1756.  
  1757. where "r" is radius of the circle and "t" is the parametrization of it.
  1758. When t goes from 0 to 1, x and y coordinates define a perfect circle.
  1759.  
  1760. Use Create/Controls/Offset to create an offset primitive under the method,
  1761. representing the center point of the circle. Assuming that the radius
  1762. remains the same during the animation, say 0.5, add the following tag to
  1763. the offset:
  1764.  
  1765.    SFOR x+=0.5*sin(2*PI*t),y+=0.5*cos(2*PI*t)
  1766.  
  1767. This way, we can manipulate the offset so that instead of a single point,
  1768. the result is an orbit for the electron (in this case, a circle).
  1769.  
  1770. The animation is now ready. When you play it, the time goes from 0 to 1
  1771. and the formula attached to the electron object returns random parameter
  1772. values. The skeleton method object uses these values to evaluate a point
  1773. from its parameter, describing possible positions for the electron, and
  1774. then moves the electron to that point.
  1775.  
  1776.                              - TUTORIAL 6.23 -
  1777.  
  1778. 6.10 SKELETON
  1779.  
  1780. The SKELETON method is somewhat similar to the SIMPLE SKELETON; it pulls
  1781. the target objects to its skeleton parameter. However, SKELETON can also
  1782. rotate objects, so that their directions match the curvature of the
  1783. skeleton, thus opening new possibilities for exciting new animation
  1784. effects.
  1785.  
  1786. Because of this rotation feature, the SKELETON method requires two
  1787. parameters instead of one. They are called as "primary" and "secondary"
  1788. skeletons. The primary skeleton defines the actual direction and position
  1789. for target objects, while the second skeleton is used for defining how
  1790. target objects are oriented around the primary skeleton (the "torsion").
  1791. For example, if the secondary skeleton object is just a static object
  1792. defining a fixed direction, the targets are just bent according to the
  1793. primary skeleton. If the secondary skeleton is animated so that the
  1794. direction it defines changes during the animation, target objects are
  1795. rotated around the primary skeleton accordingly.
  1796.  
  1797. 6.10.1 Another Logo Text Animation
  1798.  
  1799. Lets re-create the logo text animation of the example 6.8.3 "Elastic
  1800. Skeleton and Logo Text", but now using general skeleton. This example
  1801. demonstrates the difference between the two methods well.
  1802.  
  1803. 1. Create a logo text
  1804.  
  1805. 2. Create a SKELETON method to the same level with the characters, using
  1806.    Create/Structure/Method.
  1807.  
  1808. 3. Create a B-Spline curve under the method. for example using Create/
  1809.    Controls/ B-Spline Ctrlp, so that the curve passes through all the
  1810.    target characters.
  1811.  
  1812. 4. Make the B-Spline skeleton curve the current level and create a group
  1813.    referring to some points of the curve.
  1814.  
  1815. 5. Apply Animate/Create/Path to the group.
  1816.  
  1817. 6. Create the second parameter for the skeleton method, to the same level
  1818.    with the primary skeleton curve. Note that the direction of the
  1819.    secondary skeleton should be somewhat perpendicular to the primary
  1820.    skeleton. You can use an axis primitive (Create/Controls/Axis).
  1821.  
  1822. Figure T6-30: Logo Text Controlled by the General SKELETON Method.
  1823.               (PICTURE: T6-30)
  1824.  
  1825. Play the animation and compare it to the corresponding SIMPLE SKELETON
  1826. animation. Your logo is bent along the primary skeleton curve and
  1827. individual characters of it are rotated to match the curvature of the
  1828. skeleton.
  1829.  
  1830.                              - TUTORIAL 6.24 -
  1831.  
  1832. 6.10.2 Rotating Skin wound Bones
  1833.  
  1834. The purpose of this example is to demonstrate and clarify the purpose of
  1835. the secondary skeleton required by the general skeleton method, and how it
  1836. can be used for rotating target objects around the primary skeleton.
  1837.  
  1838. 1. Create a freeform tube by rotating a curve around a horizontal axis
  1839.    (Create/Freeform/Rotate). Stretch the tube so that the cross-section of
  1840.    it is ellipse. This helps you to visualize the animation when it will
  1841.    be played.
  1842.  
  1843. 2. Make the freeform tube mesh the current level and subdivide its control
  1844.    polygon to sub-groups horizontally (each sub-group should be an ellipse
  1845.    around the axis of the tube).
  1846.  
  1847. 3. Create a SKELETON method to control the sub-groups (so put it to the
  1848.    same hierarchy level with them).
  1849.  
  1850. 4. Create the primary skeleton curve, following the axis of the tube,
  1851.    under the method.
  1852.  
  1853. 5. Create the secondary skeleton by using the function Create/Controls/
  1854.    Axis; draw the axis perpendicular to the primary skeleton.
  1855.  
  1856. 6. Select the menu Animate/Control/Refresh so REAL 3D matches the targets
  1857.    with the skeletons.
  1858.  
  1859. 7. Now, bend the primary skeleton curve and refresh the animation system.
  1860.    The freeform tube is bent accordingly.
  1861.  
  1862. 8. Swap the orientation of the View window so you look along the primary
  1863.    skeleton, select the secondary skeleton and apply the function Animate/
  1864.    Create/Rotate to it. This makes the secondary skeleton rotate around
  1865.    the primary skeleton, making the "skin" (= the tube surface) also
  1866.    rotate accordingly around the "bones" (= the primary skeleton).
  1867.  
  1868. Figure T6-31: Secondary Skeleton Rotates a Freeform Tube around its
  1869.               Primary Skeleton.  (PICTURE: T6-31)
  1870.  
  1871. Play the animation; try rotating the View window so you can see how the
  1872. freeform tube rotates around its "elastic axis".
  1873.  
  1874. Let us leave the SKELETON method now and enter the next example section
  1875. which demonstrates the use of INVERSE KINEMATICS.
  1876.  
  1877. 6.1 1 INVERSE KINEMATICS
  1878.  
  1879. Whenever you decide to switch you computer on, you just push the power
  1880. switch with your finger-tip. Let's analyze from animator's point of view,
  1881. what happens when you switch your computer on.
  1882.  
  1883. All kinds of muscles in your shoulder rotate your upper arm around your
  1884. shoulder. Also your biceps rotate your forearm around the elbow. Finally
  1885. muscles in the forearm bend your finger around its joints so that your
  1886. finger-tip eventually pushes the button,
  1887.  
  1888.                              - TUTORIAL 6.25 -
  1889.  
  1890. This means that the position of your finger-tip is determined by the
  1891. positions of the bones between the finger-tip and the shoulder. In other
  1892. words, the way your muscles modify the bones makes the finger-tip hit the
  1893. power-switch.
  1894.  
  1895. This is not how Inverse Kinematics works. When using Inverse Kinematics,
  1896. you don't have to define how the bones should be rotated in order to
  1897. produce a desired route for the finger-tip. You just define the position
  1898. or route for the finger-tip and Inverse Kinematics solves the problem, how
  1899. the bones should be positioned.
  1900.  
  1901. 6.11.1 Curl a Finger
  1902.  
  1903. In this example we will create a simple finger by using a conical tube
  1904. tool and control it by using the INVERSE KINEMATIC and SKELETON methods.
  1905.  
  1906. If you are already familiar with the conical tube tool, you know it
  1907. creates its objects by combining quadrics, such as cones, cylinders and
  1908. spheres. Because this tool is suitable for modelling robots, the question
  1909. "how to keep joints stuck to each other" is quite an interesting one.
  1910.  
  1911. The idea of this example is the following: an object created by a tube
  1912. tool represents one finger. A SKELETON method is used for controlling many
  1913. finger objects and the skeleton curve is animated by defining the path of
  1914. its end point using INVERSE KINEMATICS. This is quite a common way to use
  1915. inverse kinematics with skeletons.
  1916.  
  1917. 1. Create a polygonal line using the function Create/Controls/Open Line.
  1918.    This line represents the bones of your finger, hence it consists of
  1919.    four points. It will be used as a primary skeleton curve.
  1920.  
  1921. 2. Create a tube representing your finger by selecting the menu Create/
  1922.    Compound Tools/Conical. Because you use quadrics, the skeleton must
  1923.    perfectly match the tube. So, use dragging when you define center
  1924.    points for conical tube joints. Because inverse kinematics allows you
  1925.    to define the position for the END point, make sure that the direction
  1926.    of your tube is the same as the direction of your skeleton. Otherwise
  1927.    you would define the position for a finger-root, not for a fingertip.
  1928.  
  1929. 3. Make the tube object the current level and create a SKELETON method to
  1930.    the same level with the component primitives of the tube.
  1931.  
  1932. 4. Use Cut and Paste to move the skeleton curve under the method object
  1933.    in the hierarchy.
  1934.  
  1935. 5. Create the secondary skeleton by creating an axis primitive
  1936.    perpendicular to the primary skeleton. Now the skeleton is ready, so
  1937.    select the menu Animate/ Control/Refresh. This instructs REAL 3D to fix
  1938.    the target objects to their current positions on the skeleton.
  1939.  
  1940. 6. Now, select the primary skeleton curve and the function Modify/Special/
  1941.    Inverse Kinematics and modify the end point of the skeleton. Then
  1942.    refresh the animation system and, as you can see, the finger is pulled
  1943.    to the skeleton and all the joints of the finger remain connected.
  1944.  
  1945. 7. Create an INVERSE KINEMATICS method at the same level with the skeleton
  1946.    curves; the skeletons will be targets for the INVERSE KINEMATICS
  1947.    method.
  1948.  
  1949. 8. The INVERSE KINEMATICS method requires only one parameter, which
  1950.    defines the end point of the target curve. So, create a B-Spline curve
  1951.    defining the route for the end
  1952.  
  1953.                              - TUTORIAL 6.26 -
  1954.  
  1955. Figure T6-32: INVERSE KINEMATICS moves the end point of the skeleton while
  1956.               the skeleton determines the position of the finger.
  1957.               (PICTURE: T6-32)
  1958.  
  1959. Play the animation, and the finger tip follows the defined curve (unless
  1960. the curve is too far so that the finger cannot follow it; then the finger
  1961. just reaches out as much as possible).
  1962.  
  1963. Okay, let's improve this animation a bit. So, jump to the next example but
  1964. don't delete this one.
  1965.  
  1966. 6.11.2 Push a Button with the Finger-tip
  1967.  
  1968. Lets create an animation where a finger pushes a button. This can be
  1969. accomplished by using the same object to define motions for the button and
  1970. the finger-tip.
  1971.  
  1972. To do this:
  1973.  
  1974. 1. Create a level object called "button" under the root level and a cube
  1975.    representing a button under the button level.
  1976.  
  1977. 2. Create a PATH method object under the button level.
  1978.  
  1979. 3. Create a motion for the button by using a stretched circle: create a
  1980.    circle under the path method and use Modify/Linear/Extend to stretch it
  1981.    horizontally so that it becomes just a straight line.
  1982.  
  1983. 4. Create a link pointing to the stretched circle (select the circle and
  1984.    use the menu Create/Structure/Link).
  1985.  
  1986. 5. Modify/Structure/Cut the link. Modify/Structure/Delete the original
  1987.    path under the INVERSE KINEMATICS method and Modify/Structure/Paste the
  1988.    link to replace it. The INVERSE KINEMATICS method now uses the circle
  1989.    to define the end point of the skeleton .
  1990.  
  1991. Figure T6-33: The Button and the Finger use the same Path.
  1992.               (PICTURE: T6-33)
  1993.  
  1994. Make sure that the finger is close enough to the button and play the
  1995. animation. Because the same primitive is used for defining the motion for
  1996. the both objects, the result gives an impression that the finger pushes
  1997. the button.
  1998.  
  1999. 6.11.3 Interactively Controlled Hierarchical Skeletons
  2000.  
  2001. This example demonstrates how to create a hierarchical skeleton, and how
  2002. to control it interactively using inverse kinematics.
  2003.  
  2004.                              - TUTORIAL 6.27 -
  2005.  
  2006. It is not difficult to find examples of hierarchical skeletons. Just look
  2007. at your hand and you can see one example.
  2008.  
  2009. The ability to fork one skeleton to several sub-skeletons is often needed,
  2010. especially when creating character animations. Actually, great deal of
  2011. power provided by skeletons is based on this feature.
  2012.  
  2013. So, how to create hand-like hierarchical skeletons? The answer is simple:
  2014. skeletons can be targets to another skeletons.
  2015.  
  2016. So, lets examine how to create such a hierarchical skeleton object and how
  2017. it can be controlled and modified.
  2018.  
  2019. 1. Create a polygonal line (Create/Controls/Open Line) consisting of three
  2020.    points representing your arm: shoulder, elbow, wrist.
  2021.  
  2022. 2. Create an arm using the Conical Tube tool. Snap the joints of the tube
  2023.    to the points of the polygon using dragging, to get perfect matching.
  2024.  
  2025. 3. Create a SKELETON method under the tube object so that all primitives
  2026.    of the tube will be targets for the method. Use Cut and Paste to move
  2027.    the skeleton line under the method. Also create the secondary skeleton
  2028.    (Controls/Axis). Later, we will rotate the secondary skeleton to make
  2029.    the robot rotate its wrist.
  2030.  
  2031. 4. Select Animate/Control/Refresh and now the arm is fixed to the
  2032.    skeleton. Select the skeleton curve and use Modify/Special/Inverse
  2033.    Kinematic to modify it. Refresh the animation system again, just to
  2034.    make sure that the skeleton really works. Note that if you have
  2035.    installed the default key-bindings, you can use hot keys to do that.
  2036.    This makes the interactive handling of skeletons much more convenient
  2037.    compared to corresponding menu selections.
  2038.  
  2039. 5. Select Modify/Structure/Copy while the entire arm object is selected.
  2040.    We are going to create all fingers by duplicating and scaling the arm.
  2041.  
  2042. 6. Create a new level object at the same level with the SKELETON method
  2043.    and rename it as "fingers". Make it the current level.
  2044.  
  2045. 7. Select the menu Modify/Structure/Paste. Modify the pasted arm smaller
  2046.    so that it represents a finger.
  2047.  
  2048. 8. Create the second and third fingers by duplicating and rotating the
  2049.    first one.
  2050.  
  2051. 9. Now, set the value of tag ISKE associated with the SKELETON method
  2052.    controlling the arm to 0. This tells REAL 3D that the situation is
  2053.    changed, and the information of the relationship between the targets
  2054.    and the skeleton should be redefined. Select the menu Animate/Control/
  2055.    Refresh and your "Robot Arm" is complete.
  2056.  
  2057. Figure T6-34: A simple robot arm. Skeletonally controlled fingers are
  2058.               sub-objects of skeletonally controlled arm. (PICTURE: T6-34)
  2059.  
  2060. After practising this a couple of times, it should not take more than a
  2061. minute or two to build up this kind of hierarchical robot arm.
  2062.  
  2063. So, let's have a look how this arm can be controlled by using inverse
  2064. kinematics (naturally you can use all normal modify/animation functions
  2065. to manipulate it, too).
  2066.  
  2067.                              - TUTORIAL 6.28 -
  2068.  
  2069. In order to move its wrist to another place, just select the skeleton line
  2070. used for controlling the upper arm and the forearm and move its end-point
  2071. with the Modify/Special/Inverse Kinematic modification, then select
  2072. Animate/Control/Refresh and the arm, including all fingers, is pulled back
  2073. to the skeleton.
  2074.  
  2075. If you want to define a new position for a finger-tip, just select the
  2076. skeleton line used for controlling the finger in question, use Modify/
  2077. Special/Inverse Kinematics and refresh the animation system.
  2078.  
  2079. In order to define the same position for all finger-tips, select the
  2080. "fingers" object (in other words, the object containing all the fingers),
  2081. and use Modify/Inverse Kinematics etc.
  2082.  
  2083. But how to rotate the wrist of the arm? Select the secondary skeleton
  2084. curve of the skeleton method controlling the arm and rotate it using any
  2085. suitable function . Refresh the animation system and fingers are rotated
  2086. accordingly.
  2087.  
  2088. As you already noticed, the inverse kinematics function always modifies
  2089. the end point of the skeleton. So how to define a position for the other
  2090. end? Just swap the direction of the skeleton using the function Modify/
  2091. Freeform/Swap Direction, use inverse kinematics and swap the direction
  2092. back.
  2093.  
  2094. We will need this arm in the next example, so don't delete it yet.
  2095.  
  2096. 6.11.4 An Animated Robot Arm
  2097.  
  2098. In this example we will define fixed positions for all the finger-tips
  2099. and a motion for the wrist.
  2100.  
  2101. 1. Create three offset primitives under the root level. We will use these
  2102.    offsets for defining fixed positions for the finger-tips. The reason
  2103.    why we create the offsets above the arm level is that when we animate
  2104.    the arm, it should not animate these offsets (because we want that
  2105.    they stay fixed).
  2106.  
  2107. 2. Create an INVERSE KINEMATICS method under the skeleton method of each
  2108.    finger.
  2109.  
  2110. 3. Create a link to each offset and Cut&Paste it under the corresponding
  2111.    INVERSE KINEMATICS method.
  2112.  
  2113. 4. Create an INVERSE KINEMATICS method under the skeleton method used for
  2114.    controlling the entire arm, and create a B-Spline curve defining a
  2115.    motion for the wrist, under the new method.
  2116.  
  2117. Figure T6-35: A Skeletonally controlled arm. The wrist is moving, while
  2118.               the finger-tips and the shoulder remain fixed.
  2119.               (PICTURE: T6-35)
  2120.  
  2121. Before we leave these Inverse Kinematics examples, it should be noted that
  2122. examples we have gone through so far could only scratch the surface of all
  2123. the possibilities which inverse kinematics and skeletonal control offer.
  2124. For example, they are very important tools when animating mechanical
  2125. devices, such as engines of cars and especially when building up
  2126. mechanical connections.
  2127.  
  2128.                              - TUTORIAL 6.29 -
  2129.  
  2130. 6.12 MORPHING
  2131.  
  2132. Actually, we have already created some morphing examples. However, it is
  2133. time to acquaint you with two methods which are designed especially for
  2134. morphing. They allow you to morph objects as well as materials.
  2135.  
  2136. Morphing methods are based on key framing. This means that you can
  2137. determine the shape of an object by defining two or more key-frames for
  2138. it. When the animation is played, the shape of the object is modified from
  2139. the first key frame towards the last. REAL 3D automatically interpolates
  2140. intermediate frames for you, using extremely "smooth" B-Spline
  2141. interpolation. This means that the objects and points do not move along a
  2142. straight line between corresponding key frame positions but along a
  2143. B-Spline curve. This feature is very valuable, especially when morphing
  2144. camera positions.
  2145.  
  2146. Morphing methods can also be applied to texture maps and materials.
  2147.  
  2148. 6.12.1 Second Talking Head
  2149.  
  2150. Let's create the example presented in the Path example 6.1.6, a talking
  2151. head, but now using morphing.
  2152.  
  2153. 1. Create a head; just a profile curve will do, to make modelling simple.
  2154.  
  2155. 2. Create MORPHING OPEN method to the same level so the profile curve
  2156.    will be target of the method.
  2157.  
  2158. 3. Copy the profile curve using Modify/Structure/Copy and paste it under
  2159.    the method object four times and modify the copies (actually the mouth;
  2160.    the purpose was to make the head talk) so they all look different.
  2161.    These are the key frame objects.
  2162.  
  2163. Figure T6-36: Morphing Applied to a Freeform Shape.  (PICTURE: T6-36)
  2164.  
  2165. Play the animation and you see the head talking.
  2166.  
  2167. As you have already figured out, morphing defines the shape of the target
  2168. object by using its parameters, in other words, key frame objects.
  2169.  
  2170. Just like any other method, the morphing method can have more than one
  2171. target. In other words, you can use one morphing method to morph more than
  2172. one object.
  2173.  
  2174.  
  2175.  
  2176. 6.12.2 Singing Heads
  2177.  
  2178. Lets create two heads singing the same song. This means that the only
  2179. difference between heads is that they are in different positions, but the
  2180. song is the same for both of them.
  2181.  
  2182. 1. Create a talking head as described in the previous section.
  2183.  
  2184. 2. Duplicate the target object so the morphing method has two targets
  2185.    instead of one.
  2186.  
  2187. Note:
  2188. That the order between the targets and the method is irrelevant.
  2189.  
  2190.                              - TUTORIAL 6.30 -
  2191.  
  2192. 3. Add the following tag to the second head:
  2193.  
  2194.      VOFF 1.5 0 0
  2195.  
  2196. This shifts the second head from the position defined by the key frames.
  2197.  
  2198. Figure T6-37: Two Heads are Morphed by the Same Information.
  2199.               (PICTURE: T6-37)
  2200.  
  2201. Play the animation and the result is two singing heads.
  2202.  
  2203. 6.12.3 Sing the Same Song Ten Times
  2204.  
  2205. Because we used MORPHING OPEN method in all the previous morphing
  2206. examples, the head started from the first key shape and stopped to the
  2207. last shape. However, in order to create a head singing the same song more
  2208. than once, the MORPHING CLOSED method should be used so all motions repeat
  2209. smoothly and continuously.
  2210.  
  2211. So, lets create a head which sings the same song ten times.
  2212.  
  2213. 1 . Create one singing head as described in the first morphing example,
  2214.     but use MORPHING CLOSED method instead of MORPHING.
  2215.  
  2216. 2. Modify the method by using the function Modify/Properties/Animation:
  2217.    set the frequency to 10.
  2218.  
  2219. Play the animation and your head sings the song ten times.
  2220.  
  2221. Figure T6-38: Closed Morphing  (PICTURE: T6-38)
  2222.  
  2223. 6.12.4 Morphing Hierarchical Objects
  2224.  
  2225. In this example, we will show you how to morph hierarchical objects and
  2226. objects containing other than freeform objects.
  2227.  
  2228. When applying morphing to hierarchical objects, the hierarchy is used for
  2229. detecting what parts of the targets and the key objects correspond each
  2230. other. This means that the hierarchical structure should be the same
  2231. (otherwise the result may be unpredictable).
  2232.  
  2233. As an example, we create a morphed hierarchical candlestick created with
  2234. the Lathe tool.
  2235.  
  2236.                              - TUTORIAL 6.31 -
  2237.  
  2238. 1. Use Create/Compound Tools/Lathe to create a nice candlestick. This tool
  2239.    uses cylinders, cones, ellipsoids, spheres and hyperbolics to construct
  2240.    the shape defined and automatically creates a new hierarchy level,
  2241.    placing all primitives under it.
  2242.  
  2243. 2. Create a MORPHING CLOSED method to the same level with the candlestick.
  2244.  
  2245. 3. Copy the candlestick and paste it inside the method object as many
  2246.    times as you wish. Modify all key candlestick shapes so they look
  2247.    different.
  2248.  
  2249. Note:
  2250. That there are no restrictions for the number of keys or the depth of the
  2251. key object hierarchy.
  2252.  
  2253. 4. Because it probably is not desirable to see the key objects, select the
  2254.    method object, select the function Modify/Properties/Attributes and set
  2255.    the gadgets WF-Invisible and RT-Invisible so only the result object
  2256.    will be visible. Of course, it is possible to create an animation where
  2257.    the key objects as well as the result are visible too!
  2258.  
  2259. Figure T6-39: Morphing A Hierarchical Candlestick  (PICTURE: T6-39)
  2260.  
  2261. 5. Play the animation.
  2262.  
  2263. 6.12.5 Morphing Texture Maps and Materials
  2264.  
  2265. If you are already familiar with REAL 3D texture mapping, you know that
  2266. textures are mapped on objects by using mapping primitives like rectangles
  2267. and cylinders. Because the mappings are just ordinary primitives in the
  2268. object hierarchy, they can be animated just like any other objects.
  2269. You can define all kinds of transformations for mappings using all
  2270. available methods, and morphing is not an exception. However, there is one
  2271. difference between morphing and other methods. Morphing does not only
  2272. change the shapes of mapping primitives, but properties of materials
  2273. referred by the mappings too! In other words, if a target object for a
  2274. morphing method is a mapping, also the material associated with the target
  2275. mapping is morphed, using materials associated with the corresponding key
  2276. frame mappings as "key materials".
  2277.  
  2278. Let s practice this a bit by creating an animation where some material
  2279. properties are morphed.
  2280.  
  2281. 1. Create three materials named as "result", "color" and "bump", each
  2282.    having for example a wooden texture map. We are going to use the last
  2283.    two as keys for defining the material properties for the "result". Set
  2284.    Bump height to zero for the "color" and to maximum for the "bump" so
  2285.    you can see the difference when result material is interpolated through
  2286.    the key materials. Set the Color and Bump gadgets for the "result".
  2287.  
  2288. 2. Create a sphere.
  2289.  
  2290. 3. Create a level at the same level with the sphere and rename it as
  2291.    "mappings". Use the function Modify/Properties/Attributes and set the
  2292.    "Mapping" gadget.
  2293.  
  2294.                              - TUTORIAL 6.32 -
  2295.  
  2296. The object now consists of one sphere and one level which will be used for
  2297. defining materials for the sphere. (Remember the philosophy: a moving car
  2298. consist of a car shape and the motion; a wooden sphere consists of a
  2299. sphere and wood). By setting the Mapping flag for the level, you instruct
  2300. REAL 3D to look inside the level to seek possible material references.
  2301.  
  2302. 4. Make the level object the current level and create one mapping
  2303.    primitive inside it by selecting the function Create/Mapping/Parallel;
  2304.    use the material "result". This means that the texture associated with
  2305.    the result material will be projected over the sphere using parallel
  2306.    mapping.
  2307.  
  2308. 5. Create a MORPHING method to the same level with the previous mapping.
  2309.  
  2310. 6. Create two parallel mappings under the MORPHING method. Use the
  2311.    material "color" with the first mapping and "bump" with the second.
  2312.  
  2313. Figure T6-40: Morphing Applied to Materials  (PICTURE: T6-40)
  2314.  
  2315. Your material morphing animation is now complete and ready to be played.
  2316. Before you play it, open a Material window and load the material "result"
  2317. so you can see how properties will change during the animation.
  2318.  
  2319. 6.12.6 Camera Flight Animation
  2320.  
  2321. This example demonstrates how camera flights can be easily created with
  2322. the MORPHING method.
  2323.  
  2324. 1. Create a cube, just to have something to look at in the animation.
  2325.  
  2326. 2. Create a level object called "camera_here"
  2327.  
  2328. 3. Set the perspective projection type (View/Type/Perspective) and select
  2329.    the menu View/Observer/Create Camera. This creates a level object
  2330.    consisting of the aimpoint and the viewpoint primitives.
  2331.  
  2332. 4. Create a MORPHING OPEN method to the same level with the camera and
  2333.    make it the current level.
  2334.  
  2335. 5. Find a suitable viewing angle using the cursor keys. When found, create
  2336.    the first key object by selecting the menu View/Observer/Create_Camera.
  2337.  
  2338. 6. Modify the viewing angle and create a new key object, using View/
  2339.    Observer/Create_Camera. Repeat this until the desired key positions
  2340.    are included.
  2341.  
  2342. 7. Activate the menu View/Observer/Camera_View. This instructs the View
  2343.    window in question to use orientation defined by the camera objects.
  2344.  
  2345. Play the animation; the orientation of the View window is fetched from
  2346. the first viewpoint and aimpoint, which in turn are modified by the
  2347. MORPHING method. The result is a camera flight animation.
  2348.  
  2349.                              - TUTORIAL 6.33 -
  2350.  
  2351. 6.13 TRANSFORM
  2352.  
  2353. The TRANSFORM method is different from other methods: it is used for
  2354. modifying the time. In other words, it is a sort of time machine capable
  2355. of modifying time so that it becomes non-linear; it can even make the
  2356. time to go backwards. All objects after the method in the hierarchy will
  2357. see the modified time.
  2358.  
  2359. 6.13.1 Piston
  2360.  
  2361. 1. Create a level object called "up&down".
  2362.  
  2363. 2. Create a cylinder representing a piston under "up&down" level.
  2364.  
  2365. 3. Create a PATH method to the same level with the piston.
  2366.  
  2367. 4. Create a vertical axis under the method level. Play the animation and
  2368.    the piston will move along the axis with constant speed ... no good.
  2369.  
  2370. 5. Create a TRANSFORM method at the same level with the "up&down" object.
  2371.    Multi-select the TRANSFORM method and "up&down" and select Modify/
  2372.    Structure/Swap to change their order in hierarchy; the method should
  2373.    be above "up&down".
  2374.  
  2375. 6. Create an axis and a circle inside the transform method as shown in
  2376.    the picture below.
  2377.  
  2378. Figure T6-41: TRANSFORM Method Modifies the Time.  (PICTURE: T6-41)
  2379.  
  2380. Play the animation and the piston will act like a real piston.
  2381.  
  2382. 7. Use Modify/Properties/Animation to change the frequency of the
  2383.    TRANSFORM method to 4 and the piston will run up and down four times.
  2384.  
  2385. Let's try to understand why the piston started to go up and down just
  2386. like any real piston.
  2387.  
  2388. The transform objects requires two parameters; in this example an axis and
  2389. a circle. The method evaluates a point from the circle corresponding the
  2390. current time. Then it projects the point to the axis and the parameter
  2391. value corresponding the projected point on the axis is the new time.
  2392. For example, if the projection of the evaluated point hits the beginning
  2393. point of the axis, the new time would be 0.0. If the point hits the end
  2394. point of the axis, the new time would be 1.0.
  2395.  
  2396. In this example we used a circle, but it is possible to use any other
  2397. evaluable object as well.
  2398.  
  2399.                              - TUTORIAL 6.34 -
  2400.  
  2401. 6.13.2 Hesitating Piston
  2402.  
  2403. The purpose of this example is to show in an intuitive manner how the
  2404. TRANSFORM method actually works.
  2405.  
  2406. We will use a small sphere and a horizontal axis to show how the point
  2407. is evaluated from the transformation curve and projected to the axis.
  2408. This is done simply by using the transformation curve to also define a
  2409. motion for the sphere object.
  2410.  
  2411. 1. Create one level object called "piston" and create the piston example
  2412.    presented in the previous example section under that level; use a
  2413.    B-Spline curve instead of the circle to define a time transformation
  2414.    (see the picture below).
  2415.  
  2416. 2. Create a new level to the same level with the "piston" object.
  2417.  
  2418. 3. Create a sphere, a horizontal axis and a PATH method under the new
  2419.    level. Place the sphere and the horizontal axis at the beginning of
  2420.    the B-Spline curve.
  2421.  
  2422. 4. Create a link which points to the B-Spline curve of the transform
  2423.    method and move (Cut/Paste) it under the PATH method. This makes the
  2424.    PATH method move the small sphere and horizontal axis along the same
  2425.    curve which is used for time transformation.
  2426.  
  2427. Figure T6-42: A Time Transformation  (PICTURE: T6-42)
  2428.  
  2429. When you play the animation, by following the sphere you can see how the
  2430. time transformation works: the current position of the sphere shows the
  2431. current point evaluated from the transformation curve. The point is
  2432. projected to the vertical time transformation axis - you can "read" the
  2433. projection value by checking where the horizontal line hits the axis. The
  2434. distance from the crossing point to the beginning of the time axis in
  2435. proportion to the whole time axis length defines the new local time for
  2436. the objects affected by the TRANSFORM method. When the B-Spline curve
  2437. turns downwards, the crossing points move downwards, too; this means the
  2438. time starts to run backwards.
  2439.  
  2440. 6.13.3 Three Dimensional Time
  2441.  
  2442. Multi-dimensional time ... sounds terrible, but it is true. It is possible
  2443. to fork one dimensional time to three dimensional time. This example
  2444. demonstrates how to do it and how to use this possibility.
  2445.  
  2446. In order to understand three dimensional time, we have to understand how
  2447. the animation system of REAL 3D works.
  2448.  
  2449.                              - TUTORIAL 6.35 -
  2450.  
  2451. Curves, such as B-Splines and circles, can be defined using so called
  2452. parametric representation: each point on the curve is represented by a
  2453. parameter value between 0 and 1. The value 0 corresponds the start point
  2454. of the curve, and the value of 1 corresponds the end point of the curve.
  2455. In other words, when the parameter value runs from zero up to one, the
  2456. corresponding point moves from the beginning of the curve to the end
  2457. point.
  2458.  
  2459. When an animation is played, the time runs from 0 to 1. Methods use this
  2460. time for evaluating points on their parameter(s). If a new time value is
  2461. given, the method knows that it should do something to make the target
  2462. objects match the new situation. For example, the PATH method knows that
  2463. it should move its target objects as much as the evaluated point has
  2464. moved from the previous frame.
  2465.  
  2466. As long as the parameter object can be fully parametrized by using only
  2467. one value, we need only one dimensional time. But, there are lot of
  2468. objects which cannot be represented by one parameter. For example, a
  2469. B-Spline mesh is such an object.
  2470.  
  2471. To clarify this further, we compare a B-Spline curve and a B-Spline mesh
  2472. and illustrate how the parametrization works for them.
  2473.  
  2474. A B-Spline curve can be parametrized using only one value. We could use
  2475. the term "length" for that value. The reason why only one dimensional
  2476. parameter value is enough is that any position on the curve can simply be
  2477. specified by mentioning the distance from the beginning point of the curve
  2478. to the point along the curve.
  2479.  
  2480. This is not possible with a B-Spline mesh. Instead, we need two values for
  2481. describing all possible points on the surface. These values could be
  2482. called as "width" and "height". For example, if the value pair 0,0
  2483. corresponds the top left edge of the surface, then the value pair 1,1
  2484. corresponds the bottom right corner of it. 0.5,0.5 corresponds the middle
  2485. point of the surface etc.
  2486.  
  2487. The time can be forked to three dimensions using a coordsys primitive as a
  2488. parameter for the TRANSFORM object instead of an axis. A Coordsys includes
  2489. 3 axes to project the evaluated point to, instead of one.
  2490.  
  2491. It is possible to move objects along a B-Spline mesh by defining the
  2492. motion using dimensional time and the mesh as a method parameter. Let's
  2493. stop the theoretic discussion now and demonstrate this in practice.
  2494.  
  2495. 1. Create a TRANSFORM method.
  2496.  
  2497. 2. Create a coordsys primitive under it.
  2498.  
  2499. 3. Create a B-Spline curve under the method so that it begins from the
  2500.    origin of the coordsys and wriggles between X and Y axes of the
  2501.    coordsys, as shown in the picture below.
  2502.  
  2503. 4. Create a level object, at the same level with the transformation
  2504.    object, and make the level the current level.
  2505.  
  2506. 5. Create a small sphere
  2507.  
  2508. 6. Create a PATH method, animating the sphere.
  2509.  
  2510. 7. Create a B-Spline mesh under the PATH method level.
  2511.  
  2512. Figure T6-43: Sphere Moves along a B-Spline Mesh.  (PICTURE: T6-43)
  2513.  
  2514.                              - TUTORIAL 6.36 -
  2515.  
  2516. The route of the sphere is defined in the parameter space of the mesh
  2517. using the transform method.
  2518.  
  2519. Play the animation and the sphere moves along a mesh. The path of the
  2520. sphere is similar to the shape of the B-Spline curve, which is used as
  2521. a parameter for the TRANSFORM method.
  2522.  
  2523. 8. Bend the mesh so that it is not planar. The consequence is that the
  2524.    route of the sphere is bent accordingly: the sphere still moves along
  2525.    the mesh, no matter how much you stretched or bent it.
  2526.  
  2527. If you have read the presented transform examples carefully, you have
  2528. probably already invented some new ideas how to use the method. However,
  2529. if you are familiar with some other high-end animation systems, you might
  2530. ask a question: why is this "transform thing" an object, not a separate
  2531. nice window? Here is the answer: because it is an object, it can be
  2532. animated by using all possible animation methods. This allows you to
  2533. even create animations with "feed-back".
  2534.  
  2535. Well, it is time to go to the next chapter. And I promise, the following
  2536. examples are worth reading.
  2537.  
  2538. 6.14 RADIAL FORCE
  2539.  
  2540. Welcome to the world of force fields and particles.
  2541.  
  2542. We could write a separate book of all possibilities and possible
  2543. applications for this subject. But while waiting for that book, and before
  2544. explaining any of the theory behind particles and those sorts of things,
  2545. lets get started by creating the first particle system oriented animation.
  2546.  
  2547. 6.14.1 Gravity
  2548.  
  2549. The RADIAL FORCE method generates a force field which affects the target
  2550. objects, so that the direction of the force field is defined by the line
  2551. between the "center point" of the method and the particle. If the radial
  2552. force field is positive, it pulls all targets towards it. If it is
  2553. negative, it pushes targets away from it. This makes this method very
  2554. suitable for simulating effects like electrical forces, magnetism and
  2555. gravity.
  2556.  
  2557. So, let's create a particle system which uses the RADIAL. FORCE method for
  2558. generating a gravity field. Our example consists of some particles, a
  2559. RADIAL FORCE method and a PROCESSOR method.
  2560.  
  2561. 1. Create one circle, activate macro recording, duplicate the circle,
  2562.    move the circle a bit, end macro recording and repeat the current
  2563.    macro 10 times. The circles are the particles.
  2564.  
  2565. 2. Create a RADIAL FORCE method at the same level with the circles.
  2566.  
  2567. 3. The RADIAL FORCE method requires one parameter, which is the position
  2568.    of the force "source". Use Create/Controls/Offset to create the
  2569.    parameter under the method.
  2570.  
  2571. 4. Create a PROCESSOR method to the same level with the force method.
  2572.  
  2573. Figure T6-44: A simple particle system. The gravity field pulls particles
  2574.               towards it.  (PICTURE: T6-44)
  2575.  
  2576.                              - TUTORIAL 6.37 -
  2577.  
  2578. Play the animation and all particles start to fall down towards the
  2579. gravity point.
  2580.  
  2581. First, what is a "particle system"?
  2582.  
  2583. Traditional particle systems consist of a large number of particles
  2584. (usually just points represented by their velocity, color etc.) acting
  2585. under the influence of external force fields, such as gravity or wind.
  2586. However , the particle system of REAL 3D is not what could be described
  2587. as "a traditional particle system". The biggest differences are that force
  2588. fields in REAL 3D are properties of objects themselves, and any object can
  2589. be used as a particle. One could almost say that there is no particle
  2590. system at all in REAL 3D. There are just objects which interact with each
  2591. other and the animation is the result of such interaction process.
  2592. But that is the situation in the Real world, too!
  2593.  
  2594. Because the particle system is implemented using methods, it is fully
  2595. integrated to the animation system. This allows you to mix particle
  2596. system oriented methods with all other methods. For example, if you have
  2597. a walking robot, you can move it forwards using a force method.
  2598.  
  2599. Because of historical reasons, we use the term "particle" in the following
  2600. examples instead of "target object". Anyway, a particle is just a target
  2601. object of a particle oriented method.
  2602.  
  2603. So, how then do the "particle oriented" methods of REAL 3D work?
  2604.  
  2605. Particle oriented methods, such as RADIAL FORCE, generate a force field.
  2606. This force field affects the "velocity" attribute of the object. The
  2607. longer the force field affects the object, the more the velocity of the
  2608. target is changed. This all happens according to Newton's laws of motion.
  2609. If you recognize the formula
  2610.  
  2611.      F=m*a
  2612.  
  2613. this all should be very clear to you. The term "F" in the formula
  2614. describes, how strong the force field affecting the particle is. The term
  2615. "m" is the mass of the particle and the term "a" is the resuming
  2616. acceleration. In other words, if the force "F" affects the particle whose
  2617. mass is "m", the acceleration for that particle will be "a".
  2618.  
  2619. What exactly is "acceleration"? Acceleration describes how much the
  2620. velocity of the particle changes ("dv") during one second and can be
  2621. solved from the following formula:
  2622.  
  2623.           dv
  2624.      a = ----
  2625.           dt
  2626.  
  2627. By combining these two formulas, we can solve how much the velocity of a
  2628. particle is changed during the time "dt".
  2629.  
  2630.                     F * dt
  2631.      F*dt=m*dv=>dv= ------
  2632.                       m
  2633.  
  2634. So, if the strength of the force field generated by a force method is
  2635. 1000 N, if the mass of the particle is 100 kg and if the time between
  2636. subsequent frame is 0.1 s, the velocity of the object is changed
  2637.  
  2638.          1000 kgm/s*0.1s
  2639.      dv= --------------- =1.0m/s
  2640.              100 kg
  2641.  
  2642. So, the purpose of the RADIAL FORCE method is just to change the velocity
  2643. of target objects in very natural manner. By default, the method generates
  2644. a force field which behaves like gravity. The formula used for that is:
  2645.  
  2646.           m1*m2
  2647.      F=g* -----
  2648.             s
  2649.  
  2650. where m1 is the mass of the particle, m2 is the mass of the gravity point
  2651. and "s" is the distance between them. "g" is the so called gravity factor
  2652. whose value is 1.0. However, you can define the strength of the force
  2653. field by associating custom formulas with the method object, as we will
  2654. see later.
  2655.  
  2656.                              - TUTORIAL 6.38 -
  2657.  
  2658. Attributes, such as mass, acceleration and velocity itself, do not move
  2659. objects. To change the attributes to real motions, the PROCESSOR method is
  2660. needed. This method reads all relevant attributes of target objects and
  2661. moves (and rotates) the targets accordingly.
  2662.  
  2663. So, in order to create a particle animation, we need some particles,
  2664. perhaps one particle system oriented method which modifies velocities and
  2665. other properties of particles, simulating the Newtons laws of motion, and
  2666. finally we need a PROCESSOR method which transforms the attributes of
  2667. target objects to real motions.
  2668.  
  2669. If you have read all text above, you recognize the term "dt" and know that
  2670. it means the time in seconds. So, how many seconds is the entire
  2671. animation?
  2672.  
  2673. Open the animation window. The Seconds field describes the length of the
  2674. animation in seconds. If the Resolution (number of frames) is 40 and
  2675. Seconds is 1.0, this means that the "dt" between two subsequent frames is
  2676. 1.0s / 40 = 0.025s.
  2677.  
  2678. Lets demonstrate the purpose of the Seconds field with an example.
  2679.  
  2680. 6.14.2 The Simplest Possible Particle Animation
  2681.  
  2682. Next we create an animation without any force fields. The question is, how
  2683. to generate motions if there are no force field methods present?
  2684. The answer is: we define the velocity attribute for particles manually.
  2685.  
  2686. 1. Create a sphere (a particle)
  2687.  
  2688. 2. Select the sphere and select the function Modify/Properties/Velocity.
  2689.  
  2690. This function allows you to define a line which represents the velocity
  2691. vector of the particle. In other words, the particle will move that much
  2692. in one second.
  2693.  
  2694. 3. Create a PROCESSOR method.
  2695.  
  2696. 4. Play the animation, and the particle moves.
  2697.  
  2698. Now, double the value of the Seconds field of the animation window. Play
  2699. the animation again and the particle will move twice as far, in other
  2700. words, twice as fast.
  2701.  
  2702. You can also modify the velocity attribute by selecting the particle and
  2703. selecting the function Modify/Properties/TAGs. There should be a tag WEL
  2704. associated with the particle describing its velocity. If it does not
  2705. exist, the particle's velocity is zero (in other words, the particle is
  2706. static).
  2707.  
  2708. Now, select the sphere and the function Modify/Properties/Spin. This
  2709. function allows you to define three values in radians, representing three
  2710. component spins. The value 3.14 makes the particle rotate 180 degrees
  2711. around the corresponding axis in one second. Note that the rotation is
  2712. defined in "object space". This means that if you rotate an object using,
  2713. for example, the Modify/Linear/Rotate function, the spin axes are also
  2714. rotated accordingly.
  2715.  
  2716. Define some spin values and play the animation. Now your sphere moves and
  2717. rotates.
  2718.  
  2719. 6.14.3 Customized Radial Force
  2720.  
  2721. As we have already mentioned, it is possible to define a custom formula
  2722. which defines the strength of force fields produced by particle methods.
  2723.  
  2724. In this example, we will create a particle "flock" which acts under the
  2725. influence of such a customized force field.
  2726.  
  2727. 1. Create a particle flock consisting of circles.
  2728.  
  2729. 2. Create a RADIAL FORCE method to the same level with the circles and add
  2730.    the following tag to it:
  2731.  
  2732.      SFOR f=100000*(s-2)
  2733.  
  2734.                              - TUTORIAL 6.39 -
  2735.  
  2736. 3. Create an offset under the RADIAL FORCE method so that the distance
  2737.    between the particles and the offset is greater than 2 m.
  2738.  
  2739. 4. Create a PROCESSOR method to the same level with the RADIAL FORCE
  2740.    method.
  2741.  
  2742. 5. Open the animation window and set the Resolution to 200 frames (this
  2743.    gives you more time to analyze what will happen).
  2744.  
  2745. Play the animation. Because in the beginning, the distance between the
  2746. particles and the force source is greater than 2.0, s-2 is positive and
  2747. the method pulls particles towards it. As soon as the distance to any
  2748. particle gets shorter than this value, the method starts to push it away.
  2749.  
  2750. For more information about all possible variables for RADIAL FORCE see the
  2751. Reference section.
  2752.  
  2753. 6.15 DIRECTED FORCE
  2754.  
  2755. The DIRECTED FORCE method can be used for generating force fields with
  2756. arbitrary and variable directions. Thus, it can be used for simulating
  2757. wind, turbulence etc.
  2758.  
  2759. The DIRECTED FORCE requires only one parameter, which describes the
  2760. direction of the force field during the animation. When the animation
  2761. is played, the method evaluates a point and a corresponding direction from
  2762. the parameter curve. The distance between the evaluated point and the
  2763. particles is used for determining the strength for the force. Thus, the
  2764. closer the particle is the parameter object, the stronger the force.
  2765.  
  2766. 6.15.1 Turbulence
  2767.  
  2768. The purpose of this example is to demonstrate how the direction and the
  2769. strength of the force is defined.
  2770.  
  2771. 1. Create a particle flock. One very easy way to do it is to use Create/
  2772.    Compound Tools/Object-Pixel Tool.
  2773.  
  2774. 2. Create a DIRECTED FORCE method.
  2775.  
  2776. 3. Create a B-Spline curve under the method. The direction of the force is
  2777.    the direction of the curve corresponding the current time. When the
  2778.    animation is played, the time runs from 0 up to 1 and the direction of
  2779.    the force varies according to the curvature of the method parameter.
  2780.    If the parameter is just a straight line, it generates a force field
  2781.    with constant direction, because the direction of the curve is the same
  2782.    everywhere. A Circle makes the force field rotate etc.
  2783.  
  2784. 4. Create a PROCESSOR method at the same level with the force method.
  2785.  
  2786. Figure T6-45: A Directed Force Field Defined by a B -Spline Curve.
  2787.               (PICTURE: T6-45)
  2788.  
  2789. 5. Set the Seconds field of the Animation window to 2.0.
  2790.  
  2791. Play the animation. The shorter the distance between the particle and the
  2792. parameter object, the stronger the force field.
  2793.  
  2794.                              - TUTORIAL 6.40 -
  2795.  
  2796. 6.15.2 Snow in the Wind
  2797.  
  2798. The purpose of this example is to demonstrate use of multiple methods at
  2799. the same hierarchy level. This means that more than one force field
  2800. affects the particles and the result force is the sum of several forces.
  2801.  
  2802. First we need a force field which pulls the snow down (the gravity). This
  2803. can be implemented using a straight line as a parameter for the DIRECTED
  2804. FORCE method.
  2805.  
  2806. Then we need a force field representing the wind.
  2807.  
  2808. One way to create wind is to use several force methods at the same level
  2809. so that different parts of the particle mass are affected by different
  2810. methods; the closer a particle is to a method, the more that method
  2811. affects it. This naturally causes some turbulence to the particle mass.
  2812.  
  2813. However, in this example we will create a customized force field. The
  2814. direction of the wind depends on the position of the particle causing
  2815. the particle mass behave like snow in a storm.
  2816.  
  2817. 1. Create particles representing snow flakes. The more memory you have,
  2818.    the more snow you can have.
  2819.  
  2820. 2. Create a DIRECTED FORCE method and rename it as "gravity".
  2821.  
  2822. 3. Add the following tag to the method:
  2823.  
  2824.      SFOR f=9.81
  2825.  
  2826. This means that the strength of the gravity is always 9.81. In other
  2827. words, the distance between the parameter object and particles does not
  2828. determine the strength of the force. The value 9.81 is very close the
  2829. force field generated by the earth.
  2830.  
  2831. 4. Create a straight line under the method object, representing the
  2832.    direction of the gravity (it should point downwards).
  2833.  
  2834. 5. Create another DIRECTED FORCE method to the same hierarchy level with
  2835.    the first one and add the following tag to it:
  2836.  
  2837.      SFOR f=10, fx=sin((y+t)*10), fy=cos((x+t)*10), fz=0
  2838.  
  2839. Variables fx, fy and fz are used for defining the direction of the force
  2840. and they are initialized to reflect the direction defined by the parameter
  2841. of the method. Here we override the original values by using sin() and
  2842. cos() functions.
  2843.  
  2844. 6. Create an offset primitive under the method. We can use any evaluable
  2845.    object here, because our custom formula overrides the direction anyway.
  2846.  
  2847. 7. Create a PROCESSOR method to the same hierarchy level with the other
  2848.    methods.
  2849.  
  2850. Figure T6-46: Snow particles are affected by two separate force fields:
  2851.               one simulating the gravity and one simulating the wind.
  2852.               (PICTURE: T6-46)
  2853.  
  2854.                              - TUTORIAL 6.41 -
  2855.  
  2856. Open the animation window, set Resolution to 100 and Seconds to 10, and
  2857. play the animation. If the result is not what you expected, cancel it and
  2858. use Undo feature to restore the situation. Note that you cannot play the
  2859. animation backwards to restore the situation; particle methods are such by
  2860. their nature that running the time backwards does not produce the same
  2861. events in reversed order, but results in a new situation.
  2862.  
  2863. If things do not happen fast enough in the animation, increment the
  2864. "Seconds" value. If too much is happening, decrement Seconds and/or
  2865. increment frame resolution.
  2866.  
  2867. You may also save the project before you play the animation; it is safer
  2868. than using Undo, whose depth may not be sufficient if you make too many
  2869. mistakes.
  2870.  
  2871. For more information about the variables for the DIRECTED FORCE, see the
  2872. Reference manual.
  2873.  
  2874. 6.16 TANGENT FORCE
  2875.  
  2876. The third force type is the TANGENT FORCE. The direction of the force
  2877. field is always perpendicular to the parameter object and the line between
  2878. the target object and the center point of the force. The right hand rule
  2879. can be used for visualizing the direction, so that if the thumb of your
  2880. right hand represents the parameter object direction and your first finger
  2881. points to the particle, your second finger shows the direction of the
  2882. force.
  2883.  
  2884. Figure T6-47: Tangent Force  (PICTURE: T6-47)
  2885.  
  2886. This method can be used for simulating rotating force fields like those
  2887. found from electrical equipment, generators etc.
  2888.  
  2889. Because the generated force field rotates target objects around the
  2890. parameter object, the centrifugal force tries to explode the particle
  2891. mass just like in the real world.
  2892.  
  2893. 6.16.1 Centrifugal Force
  2894.  
  2895. The purpose of this example is not just to demonstrate how to create a
  2896. tangential force field, but also to demonstrate how hierarchical animated
  2897. objects can be used as targets for particle oriented methods, and how
  2898. these traditional and particle oriented methods can be mixed with each
  2899. other.
  2900.  
  2901. In this example we will use a "mechanically" animated object as a particle
  2902. and let a tangential force field rotate such particles. Because of the
  2903. centrifugal force, particles will disappear quite soon, but who cares.
  2904.  
  2905. 1. Create a level and rename it as "particle".
  2906.  
  2907. 2. Create animated legs (just as in the example 6.3.1 Walking Legs), under
  2908.    the "particle" object.
  2909.  
  2910. 3. Duplicate "particle" so that you have several walking legs.
  2911.  
  2912. 4. Create a TANGENTIAL FORCE method to the same level with the particles.
  2913.  
  2914. 5. Create an axis primitive under the force method.
  2915.  
  2916. 6. Create a PROCESSOR method to the same level with the TANGENTIAL FORCE
  2917.    method and the particles.
  2918.  
  2919.                              - TUTORIAL 6.42 -
  2920.  
  2921. Figure T6-48: Walking Legs as Particles Acting under the Influence of a
  2922.               Rotating Force Field.  (PICTURE: T6-48)
  2923.  
  2924. Set Resolution=100 frames, Seconds=10 and play the animation. Tangential
  2925. force starts to rotate walking legs; because of the centrifugal force,
  2926. all the walking legs go away.
  2927.  
  2928. Now we have gone through all three force methods by studying just one or
  2929. two simple examples of each of them. The reason for this is not that there
  2930. are no more things to tell you about these methods, but these kind of
  2931. force simulations require some basic knowledge of mathematics and physics,
  2932. and it would require an entire book to go through all different features
  2933. and possible applications. So, it is time to leave these force methods
  2934. now and enter the next section.
  2935.  
  2936. 6.17 INTERACTIVE COLLISION DETECTION
  2937.  
  2938. The collision detection methods allow you to create extremely impressive
  2939. animations. For example, throw a football down the stairs and it bounces
  2940. down just like it does in the real world. Put a sphere on a table, tilt
  2941. the table and the sphere rolls along the table, falls down and rebounds
  2942. from the floor. The list of possible examples is infinite.
  2943.  
  2944. Interactive collision detection means that collisions are detected between
  2945. all particles (objects).
  2946.  
  2947. 6.17.1 Colliding Spheres
  2948.  
  2949. 1. Create two spheres
  2950.  
  2951. 2. Select the second sphere and define a velocity for it: select Modify/
  2952.    Properties/Velocity and draw a line starting from the sphere, passing
  2953.    through the second sphere. This will make the spheres collide.
  2954.  
  2955. 3. Create one INT COLLISION to the same level with the spheres.
  2956.  
  2957. 4. Create a PROCESSOR method (you should already know to which level...).
  2958.  
  2959. Figure T6-49: Collision Detection Applied to Two Spheres. (PICTURE: T6-49)
  2960.  
  2961. Play the animation (if you continue from the previous example, first reset
  2962. Seconds to 1.0). The second sphere moves towards the first one until they
  2963. collide. After the collision, the first sphere also moves. This all
  2964. happens according to Newton's laws of motion.
  2965.  
  2966.                              - TUTORIAL 6.43 -
  2967.  
  2968. 6.17.2 Multiple Collisons
  2969.  
  2970. This example is very similar to the previous one except that now we use a
  2971. chain consisting of several spheres and a cube. The first sphere collides
  2972. to the second, the second to the third and so on. The purpose of the cube
  2973. is to show how collisions change the velocity as well as the spin of
  2974. objects.
  2975.  
  2976. 1. Create several spheres and one cube so that the first sphere will hit
  2977.    the cube, after colliding with other spheres. If the sphere-cube
  2978.    collision point is not on the line between the centers of gravity of
  2979.    the objects, the collision makes the cube spin, too.
  2980.  
  2981. 2. Define a velocity for the first sphere towards the other spheres. Make
  2982.    sure that the velocity is high enough (the velocity vector is long
  2983.    enough).
  2984.  
  2985. 3. Add a tag "FMAS 500" to the first sphere. This redefines the mass of
  2986.    the sphere so that it is heavier than other spheres. If there is no
  2987.    FMAS tag associated with an object, the default mass, 100 kg, is used.
  2988.  
  2989. 4. Create INT. COLLISION and PROCESSOR methods.
  2990.  
  2991. Figure T6-50: A Heavy Sphere Producing Multiple Collision.
  2992.               (PICTURE: T6-50)
  2993.  
  2994. Save the whole collision object and play the animation. If the velocity
  2995. was not high enough, select Project/Project/New and reload the collision
  2996. object. Again, remember that if you play the animation backwards, you
  2997. won't get back the original situation. So, the best way to test particle
  2998. animations and collision detection is to save the original situation and
  2999. load it back when necessary (or use Undo).
  3000.  
  3001. 6.17.3 Bowling Alley
  3002.  
  3003. In this example we will create a complete bowling alley. When you play
  3004. it, the bowling ball moves towards the pins while gravity makes it collide
  3005. with the bowling alley . The bowling ball starts to rotate along the
  3006. bowling alley due to the friction between the ball and the alley. Finally
  3007. the ball collides with the pins, the pins collide with each other and all
  3008. you have to do yourself is to write down the scores.
  3009.  
  3010. After some practising, it should take only a couple of minutes to
  3011. construct this kind of animation.
  3012.  
  3013. 1. Create the bowling alley floor (e.g. a cube) and redefine the mass of
  3014.    it to be extremely high by adding "FMAS 100000000" tag to it. It must
  3015.    be very heavy because we don't want the bowling ball and the pins to
  3016.    affect the floor too much.
  3017.  
  3018. 2. Set the "Modify/Properties/Attributes/Protected" flag of the bowling
  3019.    alley. We have to do this, because we don't want the gravity which
  3020.    pulls the pins and the ball against the alley to affect the alley
  3021.    itself. By setting this protected field, we can fix the position of
  3022.    the alley.
  3023.  
  3024. 3. Create the pins on the bowling alley by using Create/Compound/Lathe
  3025.    and duplicate functions.
  3026.  
  3027.                              - TUTORIAL 6.44 -
  3028.  
  3029. 4. Create a bowling ball about 0.5 meter above the bowling alley, as if
  3030.    it has just been thrown towards the pins.
  3031.  
  3032. 5. Use the function Modify/Properties/Velocity to define the horizontal
  3033.    velocity for the ball. The velocity vector should be almost twice as
  3034.    long as the alley.
  3035.  
  3036. 6. Create an INT COLLISION method.
  3037.  
  3038. 7. Create a DIRECTED FORCE method and use an axis primitive to define
  3039.    the direction for the gravity (downwards!). Add the following tag to
  3040.    the force method:
  3041.  
  3042.      SFOR f=10
  3043.  
  3044. This makes the strength of the force constant, just as real gravity is in
  3045. bowling alley scale. The gravity force on the earth is actually not
  3046. constant, it varies e.g. according to the distance from the centerpoint
  3047. of the planet. Nevertheless, the gravity variations on the bowling alley
  3048. surface are so small that they can be ignored in the bowling simulation.
  3049.  
  3050. Now your bowling alley is ready. Save it and then play it, using e.g. 100
  3051. frames, because this complicated simulation requires quite an accurate
  3052. temporal resolution. After playback, replace the scene with the original
  3053. one (load or undo).
  3054.  
  3055. Figure T6-51: Bowling  (PICTURE: T6-51)
  3056.  
  3057. By default, the friction between the ball and the alley is very low. This
  3058. means that when the ball collides with the alley, it does not start
  3059. rotating much. So, let's redefine the friction for the ball and the alley
  3060. so as soon as the ball hits the alley, it starts to roll.
  3061.  
  3062. 7. Select the ball and the alley and add following tags to them:
  3063.  
  3064.      FFRI 0.5
  3065.  
  3066. FFRI stands for FRIction, which depends on the type and the quality of the
  3067. surface of the object. Note that you can define different friction factors
  3068. for different objects, in which case the collision is processed using
  3069. their average. To be physically correct, the value of this tag should be
  3070. between 0 and 1. However, you can use higher values (or even negative
  3071. ones), but the result of such unusual friction no longer corresponds real
  3072. world.
  3073.  
  3074. If your sphere collided improperly with the alley, you can increase the
  3075. collision detection accuracy. There are several ways to do this. The first
  3076. one is to increase the "Smpl" value in the animation window. This makes
  3077. the animation system use higher internal resolution when playing the
  3078. animation. The value of Smpl affects the quality of motion blur and the
  3079. accuracy to which particle animations represent the laws of physics.
  3080.  
  3081. The second way is to increase the Resolution value of the animation
  3082. window. The more frames you specify, the shorter the time sampling
  3083. interval between two consecutive frames becomes, and the better the
  3084. accuracy which can be obtained.
  3085.  
  3086. The third way is to add the tag ICSM to those objects between which higher
  3087. accuracy of collision handling is needed. The value of the tag can be 0, 1
  3088. or 2 (default is 0). If the value of this tag is different between the
  3089. objects under consideration, the minimum is used. For example, by adding
  3090. this tag to the alley and the ball, the collision between them is
  3091. processed in high accuracy, but collisions between the ball and the pins
  3092. are processed using the default accuracy (because there is no ICSM tag
  3093. associated with pins).
  3094.  
  3095.                              - TUTORIAL 6.45 -
  3096.  
  3097. The third way is usually suitable because you can use it selectively.
  3098.  
  3099. 8. So, add the tag ICSM 2 to the alley and the ball.
  3100.  
  3101. Now your animation should work perfectly. Save it, play it and enjoy.
  3102.  
  3103. 6.17.4 Drop a Ball to a Tube
  3104.  
  3105. In this example, we will throw a sphere through a long curved tube.
  3106.  
  3107. 1. Create a curved tube using the function Create/Compound_Tools/Circular_
  3108.    Subdivided.
  3109.  
  3110. 2. Multi-select all cylinders, select Modify/Properties/Attributes, and
  3111.    activate Hollow, No 1 st BP and No 2nd BP gadgets to make the tube
  3112.    hollow.
  3113.  
  3114. 3. Define very high mass for the tube by adding the FMAS 1000000 tag to
  3115.    the tube object.
  3116.  
  3117. 4. Create INT COLLISION and PROCESSOR methods to the same level with the
  3118.    tube.
  3119.  
  3120. Figure T6-52: A Sphere is Guided through the Tube by Collision Detection.
  3121.               (PICTURE: T6-52)
  3122.  
  3123. 5. Create a sphere and "throw" it to the tube by defining a suitable
  3124.    velocity towards the beginning of the tube with the function Modify/
  3125.    Properties/Velocity.
  3126.  
  3127. 6. Add the tag ICSM 2 to the tube and the ball.
  3128.  
  3129. 7. Play the animation (1 Seconds, Resolution 100 frames).
  3130.  
  3131. One important fact related to collision animations (and other particle
  3132. oriented animations, too) should be noted: the result of such animations
  3133. depend essentially on the detection accuracy adjustments, for example on
  3134. the amount of frames specified when playing the animation. Therefore, it
  3135. may be wise to use the final resolution all the time.
  3136.  
  3137. The reason for this is that even minor changes result in an accumulative
  3138. sequence of further chances. In fact, this is the situation in the real
  3139. world, too: even the simplest collision systems are "chaotic" by their
  3140. nature.
  3141.  
  3142. 6.17.5 A Rolling Ball
  3143.  
  3144. In this example, we will create a table and some spheres on it. When the
  3145. table is tilted, spheres start to roll and fall down rebounding from the
  3146. floor. We will use the SWEEP method to tilt the table. DIRECTED FORCE
  3147. (gravity) and collision detection take care of the rest.
  3148.  
  3149. 1. Create an object consisting of a floor and a table cover. Make the
  3150.    object very heavy by adding the tag FMAS 1000000 (one million
  3151.    kilograms!) to it and nail it to the universe by setting its Protected
  3152.    flag (use Modify/Properties/Attributes). Rename the object consisting
  3153.    of the table and the floor as "table&floor".
  3154.  
  3155.                              - TUTORIAL 6.46 -
  3156.  
  3157. 2. Create table tilting mechanism using Animate/Create/Sweep. Set the
  3158.    Start time of the sweep method (Modify/Properties/Animation) to 0.05 so
  3159.    that it starts to tilt when the time reaches that value. This gives you
  3160.    time to see how collision detection keeps the spheres on the table. Set
  3161.    the End time of the method to 0.5.
  3162.  
  3163. 3. Create some spheres on the table. Put them to the same hierarchy level
  3164.    with the "table&floor" object.
  3165.  
  3166. 4. Create a gravity field by using a DIRECTED FORCE method and an axis
  3167.    parameter.
  3168.  
  3169. 5. Create INT COLLISION and PROCESSOR methods.
  3170.  
  3171. Figure T6-53: Tilt the Table and the Spheres Fall Down.  (PICTURE: T6-53)
  3172.  
  3173. 6. Add the tag FFRI 1.0 to the table and the spheres. This makes the
  3174.    spheres also rotate (they don't just slide along the table).
  3175.  
  3176. 7. Before we play the example, let us take a look at a tag called FREB. It
  3177.    allows you to define so called "rebounding factor" which defines how
  3178.    much a colliding object loses kinetic energy in the collision. The
  3179.    default is 1.0, which means that it does not lose kinetic energy at
  3180.    all. The value 0 causes object to lose all its kinetic energy making
  3181.    particles to stick to each other. So, save the animation now and play
  3182.    it. Then reset the time to 0, replace the object with the original one,
  3183.    add FREB 0.5 tags to the spheres and play the animation again.
  3184.  
  3185. 6.18 NON-INTERACTIVE COLLISION DETECTION
  3186.  
  3187. As was already mentioned in the previous section, in interactive collision
  3188. detection, collisions are detected between all objects. However, sometimes
  3189. this is not necessary or even desirable especially when animating particle
  3190. flocks consisting of thousands of particles. For example, when a man walks
  3191. in snow, collisions between the man and individual snow particles should
  3192. be detected and processed but snow particles need not collide with each
  3193. other.
  3194.  
  3195. Non-interactive collision detection method is designed for these kind of
  3196. applications. It processes collisions which occur between target objects
  3197. and parameter objects of it. However, collisions between target objects
  3198. or collisions between parameter objects are not processed.
  3199.  
  3200. So, let's practise this.
  3201.  
  3202.                              - TUTORIAL 6.47 -
  3203.  
  3204. 6.18.1 A Planet and Meteorites
  3205.  
  3206. In this example we will create a planet and several meteorites. The
  3207. gravity of the planet causes meteorites to collide with the planet.
  3208. However, collisions between meteorites are not detected.
  3209.  
  3210. 1. Model meteorites using small spheres
  3211.  
  3212. 2. Create a COLLISION method to the same level with them.
  3213.  
  3214. 3. Create a planet under the COLLISION method. Add the tag FMAS 10000000
  3215.    to the sphere to make it very massive.
  3216.  
  3217. 4. Create a RADIAL FORCE method to the same level with the meteorites.
  3218.    Create an offset primitive under it defining the position for the
  3219.    force. Create it in the middle of the planet.
  3220.  
  3221. 5. Create a PROCESSOR method.
  3222.  
  3223. Figure T6-54: Collisions only Between the Planet and the Meteorites.
  3224.               (PICTURE: T6-54)
  3225.  
  3226. 6. Play the animation. Depending on the size of the objects, you may have
  3227.    to adjust the frame count; if meteorites move so fast that they get
  3228.    through the planet surface, just increment animation Resolution value.
  3229.  
  3230. 6.19 FRICTION
  3231.  
  3232. Let's imagine a situation where a force affects an object. The force
  3233. accelerates the object according to the Newton's law of motion: F=ma.
  3234. This means that the longer the force affects to the object, the faster the
  3235. object moves. However, this is not what appears to happen in the real
  3236. world. The reason for this is that usually there are some other forces
  3237. involved, making it very difficult to generate very fast motions. For
  3238. example, the air is a such a resisting element. These resistive forces are
  3239. called friction forces.
  3240.  
  3241. The FRICTION method can be used for adding these "resistive" forces to the
  3242. virtual reality of REAL 3D. If the velocity of an object is 0, the
  3243. friction method does not affect it at all. The higher the velocity of the
  3244. object, the more the friction affects it, direction of the friction force
  3245. being always opposite to the velocity of the object. The strength of the
  3246. resisting force is proportional to the velocity squared.
  3247.  
  3248. The strength of the force depends on the size of the object, too. The
  3249. bigger the object, the higher the friction force. However, the size has
  3250. less dramatic effect to the force than the velocity attribute; the
  3251. strength of the force is increased only linearly proportionally to the
  3252. size.
  3253.  
  3254. The mass of the object naturally determines how much the friction force
  3255. can affect its velocity. The higher the mass, the less sensitive the
  3256. object is to the friction force.
  3257.  
  3258. The strength of the force generated by the friction method is defined
  3259. using the following formula:
  3260.  
  3261.                 d * e²
  3262.      f = Fmax * ---------
  3263.                 d * e²+ 1
  3264.  
  3265.                              - TUTORIAL 6.48 -
  3266.  
  3267. where d is the diameter and e is a total energy (kinetic+spin) of the
  3268. object. The Fmax is the force needed to stop the object during the time
  3269. interval between two subsequent frames. The formula can never produce
  3270. bigger forces than this maximum force.
  3271.  
  3272. The friction method does not require parameters.
  3273.  
  3274. 6.19.1 Friction and Spheres with Different Sizes
  3275.  
  3276. 1. Create three spheres with different sizes and define equal velocities
  3277.    for them by using the function Modify/Properties/Velocity.
  3278.  
  3279. 2. Create two spheres with an equal size and add the tag FMAS 10 to the
  3280.    second one.
  3281.  
  3282. 3. Create a FRICTION method to the same level with the spheres.
  3283.  
  3284. 4. Create a PROCESSOR method.
  3285.  
  3286. Figure T6-55: The Effect of the FRICTION Method on Different Objects.
  3287.               (PICTURE: T6-55)
  3288.  
  3289. Play the animation and "air resistance" slows down the spheres. The bigger
  3290. the sphere, the higher the friction . The higher the velocity, the higher
  3291. the friction. The bigger the mass, the less the friction can change its
  3292. velocity.
  3293.  
  3294. 6.19.2 Customized Friction
  3295.  
  3296. The FRICTION method can be customized, just like any other method, by
  3297. adding a custom formula or procedure defining the strength of the friction
  3298. force to it. This way it is easy to create some nice effects, like
  3299. friction whose strength depends on the position (non-homogenous friction
  3300. fields).
  3301.  
  3302. So, let's create simple particle animation where radial force moves a
  3303. number of particles while one customized friction method resists their
  3304. motions.
  3305.  
  3306. 1. Create a set of spheres.
  3307.  
  3308. 2. Create a RADIAL FORCE method. Create an offset primitive, defining the
  3309.    center of the force field, under the method.
  3310.  
  3311. 3. Create a FRICTION method and add the following tag to it:
  3312.  
  3313.      SFOR if(x<0,f=f*2,f=0)
  3314.  
  3315. The variable "x" reflects the current position of the particle in
  3316. question. So, the formula uses a conditional expression where f is either
  3317. duplicated or set to zero, depending on the position of the particle.
  3318.  
  3319. 4. Create a PROCESSOR method and play the animation.
  3320.  
  3321. All particles on the left side (where the x coordinate values are less
  3322. than zero) are affected by the friction, but particles on the right are
  3323. not.
  3324.  
  3325.                              - TUTORIAL 6.49 -
  3326.  
  3327. Figure T6-56: A Non-homogeneous Friction Field.  (PICTURE: T6-56)
  3328.  
  3329. 6.20 CREATION
  3330.  
  3331. The CREATION method is a "procedural" object creation tool. This means
  3332. that it can create new objects during animations. As a matter of fact, it
  3333. can control the whole process of "birth and death". For example, phenomena
  3334. like boiling water or fireworks are perfect applications for this method.
  3335.  
  3336. The CREATION method accepts any number of parameter objects. The method
  3337. uses the parameter objects as a samples for creating new copies. The
  3338. copies are inserted to the same hierarchy level with the method itself so
  3339. that they will be targets of it. The method can also delete target
  3340. objects.
  3341.  
  3342. The rules controlling this process are mainly defined using two tags
  3343. associated with parameters and/or target objects: SCRE and SDEL.
  3344.  
  3345. Whenever the tag SCRE is found from a parameter object, it is evaluated
  3346. and the value of the "I" variable is used for determining whether or not
  3347. a copy of the object should be created. If the value is zero (or if there
  3348. is no SCRE tag associated with the parameter object), the copy is not
  3349. created.
  3350.  
  3351. If the tag SDEL is included in the target object and if the value of the
  3352. variable "I" is other than zero, the target object is deleted.
  3353.  
  3354. 6.20.1 A Sphere Tube
  3355.  
  3356. This is perhaps the simplest possible example of using the CREATION
  3357. method: a sphere which follows a path leaving copies of itself behind.
  3358.  
  3359. 1. Create a CREATION method.
  3360.  
  3361. 2. Create a sphere under it.
  3362.  
  3363. 3. Add the following tag to the sphere:
  3364.  
  3365.      SCRE I=1
  3366.  
  3367. 4. Create a PATH method to the same level with the sphere (under the
  3368.    CREATION method) and a B-Spline curve under the PATH method.
  3369.  
  3370. Figure T6-57: A Moving Sphere as a Parameter for the CREATION method.
  3371.               (PICTURE: T6-57)
  3372.  
  3373. Play the animation and the PATH method moves the "sample" object along the
  3374. path while the CREATION method creates one new sphere in each animation
  3375. frame. The target objects created by the method have all the properties
  3376. of the sample object.
  3377.  
  3378.                              - TUTORIAL 6.50 -
  3379.  
  3380. 6.20.2 Boiling Water
  3381.  
  3382. Another good example of procedural creation is boiling water. When the
  3383. temperature reaches a certain level, bubbles begin to appear randomly
  3384. inside the water and start to go up until they reach the surface of the
  3385. water and disappear.
  3386.  
  3387. Right, let's do this.
  3388.  
  3389. 1. Create a CREATION method.
  3390.  
  3391. 2. Create a bubble under the method and add the following tags to it:
  3392.  
  3393.      SCRE I=1
  3394.      SDEL I=y>0.0
  3395.  
  3396. Because the value of the "I" variable in the SCRE tag is always 1, a new
  3397. bubble is created in each frame. The SDEL tag defines that the bubble will
  3398. be deleted as soon as its y coordinate reaches the value 0.
  3399.  
  3400. 3. Use the function Modify/Properties/Velocity to define a velocity for
  3401.    the bubble. The idea is that as soon as the bubble is created, it will
  3402.    start to go upwards.
  3403.  
  3404. 4. Create a PATH method to the same level with the bubble. Set the
  3405.    Frequency of the method to 5, and draw a strongly oscillating curve
  3406.    under the PATH method. The way we define the original position for the
  3407.    bubbles is quite "deterministic", but if the path is very curved and
  3408.    complicated, it will look as if the bubbles were created randomly all
  3409.    over the water (We will demonstrate you later how to use a real random
  3410.    function to define the position for the bubbles using RPL).
  3411.  
  3412. 5. Create the PROCESSOR method to the same level with the CREATION method.
  3413.    As mentioned earlier, an attribute itself (such as mass, velocity etc.)
  3414.    does not move the object anywhere. The PROCESSOR method is needed for
  3415.    converting the attributes to real motions. Because we did not create a
  3416.    PROCESSOR method at the same level with the sample bubble, the sample
  3417.    won't go up (the velocity is there, but it is not converted to a
  3418.    motion).
  3419.  
  3420. 6. Create a pot and a circle inside it representing the surface of the
  3421.    water in the pot. Note that we used the conditional expression "y>0"
  3422.    to define when bubbles should disappear, so the circle representing the
  3423.    level of the water should be placed to that height.
  3424.  
  3425. 7. Make the CREATION method object invisible, to make the bubbles appear
  3426.    out of nothing.
  3427.  
  3428. Figure T6-58: Boiling Water  (PICTURE: T6-58)
  3429.  
  3430. Now our boiling water example is ready. I strongly suggest that you save
  3431. this project now and spend some time to render it photo-realistically.
  3432. Use an animated bumpmap on the water surface and with these bubbles, the
  3433. boiling water should look pretty good.
  3434.  
  3435. 6.20.3 A Wriggling Snake
  3436.  
  3437. This example demonstrates how the age of the object can be used for
  3438. determining the time when the object should "die". As soon as the object
  3439. gets old enough, it disappears. The sample object is moved along a
  3440. B-Spline curve just like we did in our first CREATION example, but now we
  3441. will also delete target objects so that the earlier an object is born,
  3442. the earlier it dies.
  3443.  
  3444.                              - TUTORIAL 6.51 -
  3445.  
  3446. 1. Create the objects described in the example 6.19.3 but now add also
  3447.    the SDEL tag to the sample sphere:
  3448.  
  3449.      SDEL I=t-fx>0.1
  3450.  
  3451. The variable "fx" defines the time when the object was created. The
  3452. variable "t" represents the Current time. So, the age of the object is
  3453. t-fx and when the age gets greater than 0.1, the object is old enough for
  3454. the deletion.
  3455.  
  3456. Save and play the animation and in the beginning, it resembles our first
  3457. CREATION example. However, soon the oldest spheres start to die and the
  3458. number of spheres comprising the tube no longer rises.
  3459.  
  3460. Figure T6-59: CREATION Method Animation  (PICTURE: T6-59)
  3461.  
  3462. Let's experiment with this animation a bit more. Reload it and try the
  3463. following formula with SDEL tag:
  3464.  
  3465.      SDEL I=t-fx>0.2*sin(12*t)*0.1
  3466.  
  3467. Play the animation and the length of the "snake" varies while it moves
  3468. along the path.
  3469.  
  3470. 6.21 PROCESSOR
  3471.  
  3472. If you have gone through all animation examples so far, you are already
  3473. familiar with this method. It is used for converting particle system
  3474. oriented object attributes like the "velocity" to real motions.
  3475.  
  3476. Let's consider a particle system which consists of a sphere, a radial
  3477. force and a processor method and take a look at what actually happens
  3478. when the animation is played.
  3479.  
  3480. 1. The global time is increased by a value depending on the frame
  3481.    resolution and all methods are to be informed about the new time.
  3482.  
  3483. 2. The RADIAL FORCE manipulates the velocity attribute of the sphere.
  3484.    Because the radial force knows how strongly (F) it affects the sphere
  3485.    and how long the time (dt) has affected the sphere since the last
  3486.    frame, it can calculate how much (dv) the velocity of the sphere
  3487.    having a certain mass (m) should be changed.
  3488.  
  3489. This all happens according to the Newtons laws of motion:
  3490.  
  3491.                 dv     F * dt
  3492.      F=m*a=>F=m*--=>dv=------
  3493.                 dt       m
  3494.                       ========
  3495.  
  3496. If the formula "F=m*a" tells you nothing, you probably didn't understand
  3497. everything presented above. However, the formula can be described in a
  3498. more understandable form: if we know how long a certain force affects an
  3499. object with a certain mass, we can solve how much the velocity of the
  3500. object changes.
  3501.  
  3502. 3. Then the PROCESSOR method reads the current velocity of the sphere and
  3503.    calculates how far (ds) the sphere has travelled since the last frame
  3504.    (dt) with its current velocity:
  3505.  
  3506.                              - TUTORIAL 6.52 -
  3507.  
  3508.         ds
  3509.      v=---- =>  ds=v*dt
  3510.         dt      =======
  3511.  
  3512. In a human readable form, this could be something like: if you drive your
  3513. car and you know how long you have driven and how fast, you can calculate
  3514. how far you will get.
  3515.  
  3516. 6.22 RPL
  3517.  
  3518. The RPL method allows you to create your own RPL procedures and associate
  3519. them with objects. When the animation is played, your procedure is
  3520. executed in each frame and it is totally up to your procedure to decide
  3521. what to do when this happens.
  3522.  
  3523. Because RPL is a full featured programming language, there is not much
  3524. you could NOT do with it. In a way, this method is one of the most
  3525. powerful ones found in the program, but naturally, in order to take full
  3526. advantage of it, you have to know how to write RPL programs. All built-in
  3527. methods, such as PATH, SIZE, RADIAL FORCE etc. can be easily implemented
  3528. using the RPL method.
  3529.  
  3530. Because this subject is huge, we will go through only a basic example
  3531. here. For more information about how to write new animation methods using
  3532. RPL, see the RPL tutorial and the Reference manual.
  3533.  
  3534. 6.22.1 An Easy Way to Write a RPL Procedure
  3535.  
  3536. The easiest way to write such a procedure is to use the Macro function.
  3537. So, let's try this:
  3538.  
  3539. 1. Create a sphere.
  3540.  
  3541. 2. Record a macro in which you move the object a bit.
  3542.  
  3543. 3. Create a RPL method to the same level with the sphere.
  3544.  
  3545. 4. Add the following tag to the method:
  3546.  
  3547.      SRPL "t:macro.rpl" LOAD
  3548.  
  3549. Play the animation and the sphere moves. The RPL function LOAD loads the
  3550. current macro "t:macro.rpl" and executes it.
  3551.  
  3552. Whenever you use this method, there must be the tag SRPL associated with
  3553. it. The contents of this tag is executed in each frame and it must be a
  3554. RPL program. Usually the tag contains a function call to the actual
  3555. procedure, which is a speed-efficient way.
  3556.  
  3557. 6.23 WAVE
  3558.  
  3559. The WAVE method can be used for creating waves. If the first parameter of
  3560. it is an axis primitive, then the method creates "radial" waves. If the
  3561. first parameter is a coordsys, then the waves can be defined separately in
  3562. each direction. The second primitive can be any evaluable object defining
  3563. the shape of the waves. For example, a circle creates sine waves.
  3564.  
  3565. 6.23.1 Waving Sea
  3566.  
  3567. This example demonstrates the effect when the wave method is applied to
  3568. freeform objects.
  3569.  
  3570. 1. Create a mesh representing the surface of water.
  3571.  
  3572. 2. Create a WAVE method to the same level with the mesh.
  3573.  
  3574. 3. Create an axis under the method so that it is perpendicular to the
  3575.    mesh.
  3576.  
  3577.                              - TUTORIAL 6.53 -
  3578.  
  3579. 4. Create a circle under the method so that the axis splits it to two
  3580.    halves.
  3581.  
  3582. Figure T6-60: Waving Sea  (PICTURE: T6-60)
  3583.  
  3584. Play the animation and waves are created over the entire mesh. Because
  3585. the first parameter is an axis, the height of the wave depends on the
  3586. distance between the point of the wave and the axis.
  3587.  
  3588. 6.23.2 A Water Drop
  3589.  
  3590. This example demonstrates radial waves, too, but now we use the surface
  3591. which is constructed by rotating a curve around an axis, The radial nature
  3592. of the generated waves can be more clearly seen in this kind of surface.
  3593.  
  3594. 1. Create a "disk" mesh by using the function Create/Freeform/Rotate: just
  3595.    rotate a straight line of 10 points around an axis.
  3596.  
  3597. 2. Create a WAVE method object with an axis and a circle. Note that you
  3598.    can use the same axis which you used for creating the mesh.
  3599.  
  3600. Figure T6-61: Radial Waves  (PICTURE: T6-61)
  3601.  
  3602. Play the animation, Now the radial waves can be seen clearly.
  3603.  
  3604. 6.23.3 Parallel Waves
  3605.  
  3606. If the first parameter is a coordsys, then the profile of the wave remains
  3607. the same when moving along an "y" axis. The shape of the wave depends on
  3608. the distance between a point and the origin of the coordsys in "x"
  3609. direction. The length of the "x" axis defines the wave-length and the
  3610. length of the "z" axis defines the wave-height.
  3611.  
  3612. 1. Create a mesh.
  3613.  
  3614. 2. Create a method with a coordsys and a circle as shown in the following
  3615.    figure.
  3616.  
  3617.  
  3618.  
  3619.  
  3620.                  END OF PART 3
  3621.  
  3622.  
  3623.  
  3624.  
  3625.  
  3626.